2010-07-09 7 views
0

Je suis en train de se connecter à un serveur IRC via PHP sur une ligne de commande à l'aide de Windows 7.fsockopen ne fonctionne pas?

Everytime lors de l'exécution de cette:

$socket = fsockopen($irc_server, 6667, $errno, $errstr, 5); 

$errno = 0, $errstr = "" et $socket = « ressources id # 4 '(en utilisant die($socket);)

Quelle est la cause de cela, et comment puis-je déboguer plus dans ce domaine.

Le code suivant:

$s = fsockopen("google.com", 80, $errno, $errstr, 5); 
die($errno.", ".$errstr.", ".$s); 

... renvoie les éléments suivants:

0, , Resource id #4 

Je ne peux pas utiliser $socket. Il dit "ressource invalide" quand j'essaie de l'utiliser. En outre, la documentation PHP note que errno 0 indique un socket ouvert à tort.

L'aide est appréciée.

+0

Aaand le problème est exactement ...? L'ID de ressource est juste l'ID de la socket. Allez-y et utilisez-le. – LukeN

+0

Je ne peux pas l'utiliser. Il dit "ressource invalide" quand j'essaie de l'utiliser. En outre, la documentation PHP note que errno 0 indique un socket ouvert à tort. – Codecat

+0

Un désolé, n'a pas vu la partie 'invalide'. Eh bien, allez voir ce que 0 signifie errno. Que contient "$ irc_server"? – LukeN

Répondre

2

Pourriez-vous nous montrer un peu plus de votre code?

Que se passe avec ce code:

$s = fsockopen($irc_server, 6667, $errno, $errstr, 5); 
if ($s === false) { 
    die($errno.", ".$errstr.", ".$s); 
} else { 
    // your code with socket 
    die("Valid socket resource"); 
} 

?

+0

Mon code: http://pastebin.com/gk7BajM1 Il fait écho "Ressource de socket valide". – Codecat

+1

irCmd ne connaît pas la variable $ socket. C'est le problème je pense. –

+0

Et sur quelle ligne est l'erreur? –

0

La documentation dit (Souligné par l'auteur):

Si la valeur retournée dans errno est 0 et la fonction retourne FALSE, il est une indication que l'erreur est survenue avant l'appel connect(). Cela est probablement dû à un problème lors de l'initialisation de la socket.

Étant donné que la fonction n'a pas renvoyé false, le socket est valide. Si vous rencontrez d'autres problèmes, dites-nous ce qu'ils sont; fsockopen est revenu normalement ici.

+0

fwrite ($ socket, $ cmd, strlen ($ cmd)); me dit que j'ai passé une "ressource invalide". – Codecat

1

Je l'ai réparé.

fonction

irCmd ne savait pas $ socket, donc je mis cela en face de celui-ci:

global $socket; 

Et cela a fonctionné. Merci beaucoup!

+0

Et c'est pourquoi les globales sont mauvaises. – LukeN

+1

Pourquoi n'en faites-vous pas simplement un paramètre de irCmd? C'est une solution pour l'instant mais considérez ce qui se passe si vous voulez être connecté à plusieurs serveurs. Vous devrez le réécrire donc il est préférable de l'écrire correctement en premier lieu. –

+0

Je ne comprends pas pourquoi, mais cela a résolu mon problème. Qu'est-ce que irCmd btw? – httpete