get_headers()尝试解析无法解析的主机时如何捕获错误?

时间:2012-04-29 13:17:37

标签: php header http-headers

请考虑以下事项:

$url = 'http://psyng.com/u/9716602b';
$headers = get_headers($url, 1);
print_r($headers);

由于域psyng.com无法解析,因此此代码会导致:

Warning: get_headers(): php_network_getaddresses: getaddrinfo failed: 
No such host is known

然后脚本停止运行。有没有办法让脚本的其余部分保持运行 - 换句话说:捕获错误,并继续解决下一个URL?如下所示:

$url = 'http://psyng.com/u/9716602b';
$headers = get_headers($url, 1);
if ($headers == 'No such host is known') {
  // nevermind, just move on to the next URL in the list...
}
else {
  // resolve header stuff...
}

2 个答案:

答案 0 :(得分:3)

脚本不应该停止运行,因为生成的消息只是一个警告。我自己测试了这个脚本,这就是我看到的行为。您可以在the documentation中看到get_headers()在失败时会返回FALSE,因此您的情况应该是

if ($headers === FALSE) {
    // nevermind, just move on to the next URL in the list...

答案 1 :(得分:0)

函数get_headers返回一个布尔结果; print_r的目的是以人类可读的格式返回布尔值。

<?php
$url = 'http://psyng.com/u/9716602b';
$headers = get_headers($url, 1);
if ($headers === FALSE) { //Test for a boolean result.
  // nevermind, just move on to the next URL in the list...
}
else {
  // resolve header stuff...
}
?>