使用get_meta_tags()和&处理异常处理get_headers()?

时间:2011-05-31 06:47:20

标签: php exception-handling get-headers

在PHP中,我使用get_meta_tags()get_headers(),但是当有404时,这两个函数会发出警告。有什么办法让我抓住它吗? 谢谢!

3 个答案:

答案 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;类似。