2010-07-09 154 views
0

我试图通过PHP连接到IRC服务器使用的是Windows 7fsockopen无法正常工作?

每次在命令行中运行这个时:

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

$errno = 0,$errstr = “” 和$socket =“资源ID#4'(使用die($socket);

这是什么原因,以及如何进一步调试。

下面的代码:

​​

...返回如下:

0, , Resource id #4 

我不能使用$socket。当我尝试使用它时,它会显示“无效资源”。另外,PHP文档注意到errno 0表示错误地打开了套接字。

帮助表示赞赏。

+0

Aaand问题正是......?资源ID只是套接字的ID。继续使用它。 – LukeN 2010-07-09 22:17:11

+0

我无法使用它。当我尝试使用它时,它会显示“无效资源”。另外,PHP文档注意到errno 0表示错误地打开了套接字。 – Codecat 2010-07-09 22:20:08

+0

对不起,没有看到'无效'部分。那么,看看errno 0的意思。 “$ irc_server”包含什么? – LukeN 2010-07-09 22:22:57

回答

2

你能告诉我们一点你的代码吗?

与此代码会发生什么:

$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

我的代码:http://pastebin.com/gk7BajM1 它回声“有效套接字资源”。 – Codecat 2010-07-09 22:31:49

+1

irCmd不知道$ socket变量。这是我想的问题。 – 2010-07-09 22:34:17

+0

并在错误的哪一行? – 2010-07-09 22:35:55

0

文档说(重点煤矿):

如果errno返回的值是0 和函数返回FALSE,那就是connect()调用之前发生错误的指示。这很可能是由于初始化套接字时出现问题。

由于函数没有返回false,套接字是有效的。如果你还有其他问题,告诉我们他们是什么; fsockopen已在这里正常返回。

+0

fwrite($ socket,$ cmd,strlen($ cmd));告诉我我已通过“无效资源”。 – Codecat 2010-07-09 22:33:23

1

我修好了。

功能irCmd不知道$插座,所以我把这个在它的前面:

global $socket; 

和它的工作。谢谢一堆!

+0

这就是为什么globals是坏的。 – LukeN 2010-07-09 22:36:37

+1

你为什么不简单地把它作为irCmd的参数?这是一个现在的解决方案,但要考虑如果你想连接到更多的服务器会发生什么。你必须重写它,因此最好先写好它。 – 2010-07-09 22:38:02

+0

我不明白为什么,但实际上解决了我的问题。什么是ircmd btw? – httpete 2013-01-03 05:06:10