在 PHP 中,我使用get_meta_tags()
and get_headers()
,但是,当有 404 时,这两个函数会引发警告。有什么办法让我抓住它吗?谢谢!
问问题
1864 次
3 回答
6
get_headers
不会在 404 上引发警告/错误,但get_meta_tags
会。
因此,您可以检查标头响应并在不正常时执行某些操作:
$url = 'http://www.example.com/';
$headers = array();
$metatags = array();
$validhost = filter_var(gethostbyname(parse_url($url,PHP_URL_HOST)), FILTER_VALIDATE_IP);
if($validhost){
// get headers only when Domain is valid
$headers = get_headers($url, 1);
if(substr($headers[0], 9, 3) == '200'){
// read Metatags only when Statuscode OK
$metatags = get_meta_tags($url);
}
}
于 2011-05-31T07:11:03.873 回答
2
这两个函数会发出警告。有什么办法让我抓住它吗?
你不应该关心。当然,开发失败时的 E_WARNING 消息是可以的;它甚至是可取的,因为您可以立即看到出现了问题。我可以想象虽然您不希望您的客户看到这些警告,但是您不应该在每次使用函数时都这样做,您应该在全局范围内这样做:在生产环境中的 php.ini 中关闭 display_errors,并且您的客户将永远不会看到此类消息。
也就是说,如果您不希望它们出现在错误日志中,则必须在尝试检索元标记之前检查页面是否存在。get_headers 似乎没有引发警告,而是返回一个数组,其中第一个元素包含字符串“HTTP/1.1 404 Not Found”。您可以利用它来发挥自己的优势:
<?php
$url = 'http://stackoverflow.com';
$headers = get_headers( $yoururl );
preg_match( '~HTTP/1.(?:1|0) (\d{3})~', $headers[0], $matches );
$code = $matches[1];
if( $code === '200' ) {
$tags = get_meta_tags( $url );
}
如果您开始使用此代码,请注意 200 不是成功请求的唯一通知;304 Not Modified - 例如 - 同样有效。
于 2011-05-31T07:50:05.397 回答
-2
您可以通过这样调用它们来使其静音:
@get_meta_tags();
你不能(很容易地)“捕捉”它,但你可以检查返回值。
此外,您可以禁用或重定向警告,请参阅 error_reporting() 和 ini 指令“display_errors”等。
于 2011-05-31T06:52:55.660 回答