繁体   English   中英

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

[英]Exception handling with get_meta_tags() & get_headers()?

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

get_headers不会在 404 上引发警告/错误,但get_meta_tags会。

所以你可以检查 header 响应并做一些事情,当它不正常时:

$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);
    }
}

这两个函数会发出警告。 有什么办法让我抓住它吗?

不应该关心 当然,开发失败时的 E_WARNING 消息是可以的; 它甚至是可取的,因为您可以立即看到出现了问题。 我可以想象,尽管您不希望您的客户看到这些警告,但您不应该在使用 function 时这样做,您应该在全局范围内这样做:在生产环境中关闭 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 - 例如 - 同样有效。

您可以通过这样调用它们来使其静音:

@get_meta_tags();

你不能(很容易地)“捕捉”它,但你可以检查返回值。

此外,您可以禁用或重定向警告,请参阅 error_reporting() 和 ini 指令“display_errors”等。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM