在PHP中,我使用get_meta_tags()
和get_headers()
,但是当有404时,这两个函数会发出警告。有什么办法让我抓住它吗?
谢谢!
答案 0 :(得分: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);
}
}
答案 1 :(得分: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 - 例如 - 同样有效。
答案 2 :(得分:-2)
你可以通过这样称呼来沉默它:
@get_meta_tags();
你不能“轻易”“抓住”它,但你可以检查返回值。
此外,您可以禁用或重定向警告,请参阅error_reporting()和ini directoves“display_errors”&amp;类似。