2012-07-17 59 views
3

有人可以幫我使用PHP函數fsockopen嗎?PHP函數fsockopen永遠不會返回false

,如果我這樣調用該函數:

$fp = fsockopen('xywqnda.com', 80, $errno, $errstr, 10); 

具有不可用主機域,它永遠不會返回false,我不明白爲什麼!

+0

奇怪的是,當我運行該代碼時,我得到'$ fp'等於'bool(false)'。 – Sarke 2012-07-17 10:50:33

+0

這是我的代碼: <? \t error_reporting(E_ALL); \t ini_set(「display_errors」,「on」); \t $ fp = fsockopen(「udp://2.2.2.2」,13,$ errno,$ errstr); \t if(!$ fp) \t \t echo「offline \ n」; \t else \t \t echo「online \ n」; ?> – 2012-07-17 11:37:46

+0

請更新您的原始問題,這是更可讀。 – Jocelyn 2012-07-17 15:30:48

回答

0

試試這個

ini_set("display_errors","on") 

它會顯示一個警告,如果域名是無效的,除了該函數將返回TRUE因爲返回的文件指針,這意味着文件被成功創建,FALSE會僅當它無法創建文件時才返回。

+0

我已經嘗試過這樣的事情,它是error_reporting(E_ERROR),並且都不工作...無論如何謝謝你的回答 – 2012-07-17 10:52:11

0
// displays all warnings, notices and errors 
ini_set('display_errors', 1); 
error_reporting(E_ALL); 

$fp = fsockopen('xywqnda.com', 80, $errno, $errstr, 10); 

連接嘗試將在10秒後超時。
由於域不可用,您將收到警告。
$ errno和$ errstr將包含系統錯誤號和錯誤消息。
該函數將返回false,所以$ fp將等於false。

文檔:fsockopen

+0

這裏是我的代碼: <? \t error_reporting(E_ALL); \t ini_set(「display_errors」,「on」); \t $ fp = fsockopen(「udp://2.2.2.2」,13,$ errno,$ errstr); \t if(!$ fp) \t \t echo「offline \ n」; \t else \t \t echo「online \ n」; ?> – 2012-07-17 11:36:45

1

啊,你是使用UDP。你原來的例子沒有顯示這一點。這改變了事情。從PHP手冊:

警告

UDP套接字有時會出現沒有錯誤已經打開,即使遠程主機不可達。當您向套接字讀取數據或從套接字寫入數據時,錯誤將只有 變得明顯。 原因是因爲UDP是一個「無連接」協議,其中 意味着操作系統不會嘗試爲套接字建立鏈接,直到它確實需要發送或接收數據爲止。

相關問題