【问题标题】:get_headers is throwing a warning instead of just returning false?get_headers 发出警告而不是仅仅返回假?
【发布时间】:2013-06-17 18:38:51
【问题描述】:

根据文档

get_headers

如果标头请求失败,则应返回 false。

但是,这个警告正在破坏我的代码:

警告:get_headers(http://ideone.com/) [function.get-headers]:打开失败 流:php_network_getaddresses:getaddrinfo 失败:名称或服务 不知道在 some.php21

我想使用类似的代码来测试给定的 url 是否可用:

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

【问题讨论】:

  • 第一条评论也是这么说的。并且手册页的其余部分并没有与之相反,对于较低级别的错误(这里:DNS解析)也不是完全出乎意料的。这是投诉还是问题?

标签: php


【解决方案1】:

我不认为这是一个文档错误;至少在内部,它使用通用实现将流打开到某个位置。

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

如果您想取消此警告,请在 get_headers 前面加上 @

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

【讨论】:

  • @OneTrickPony 是的。 CURL 使用 libcurl,自然不会影响 PHP 的任何错误处理。
【解决方案2】:

你应该看看php man page of get_headers上的第一条评论

它似乎按预期工作。

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

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

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

【讨论】:

猜你喜欢
  • 2013-04-08
  • 2019-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多