get_headers抛出警告而不是只返回false?

时间:2013-06-17 18:38:52

标签: php

根据文档

get_headers

如果标头请求失败,

应返回false。

然而,这个警告打破了我的代码:

  

警告:get_headers(http://ideone.com/)[function.get-headers]:无法打开   stream:php_network_getaddresses:getaddrinfo failed:名称或服务   不知道的   第 21 some.php

我想使用与此类似的代码测试给定的网址是否可用:

$res[$i] = (get_headers($temp[$i]) == false);

2 个答案:

答案 0 :(得分:10)

我不认为这是一个doc bug;至少在内部,它使用通用实现来打开流到某个位置。

因此,当传递a)无效地址或b)无法访问的地址时,此函数将使用内部php_stream_open_wrapper_ex抛出与其他所有函数相同的警告。

如果您要取消此警告,请在get_headers之前添加@

$res[$i] = (@get_headers($temp[$i]) === false);

答案 1 :(得分:2)

您应该查看php man page of get_headers

上的第一条评论

好像它按预期工作了。

因此,您必须禁用警告,或找到解决方法。

快速搜索后,我发现这可能对您有帮助post on phpfreaks。 在那里使用的解决方案是首先使用gethostbyname来解析服务器的IP地址,然后检索标头,如果它没有返回false。

或者更简单地说,在通话前使用@禁用警告。 (请参阅Can I try/catch a warning?php's error reporting page