3

PHP ではget_meta_tags()andを使用してget_headers()いますが、404 がある場合、これら 2 つの関数は警告をスローします。捕まえる方法はありますか?ありがとう!

4

3 に答える 3

6

get_headers404 で警告/エラーをスローしませんが、スロー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

これら 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 に答える