2010-07-09 150 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