2012-07-17 61 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是一个“无连接”协议,其中 意味着操作系统不会尝试为套接字建立链接,直到它确实需要发送或接收数据为止。

相关问题