PHP ではget_meta_tags()
andを使用してget_headers()
いますが、404 がある場合、これら 2 つの関数は警告をスローします。捕まえる方法はありますか?ありがとう!
3 に答える
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);
}
}
これら 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 - たとえば - も同様に有効です。
次のように呼び出すことで、沈黙させることができます。
@get_meta_tags();
(簡単に)「キャッチ」することはできませんが、戻り値を確認することはできます。
また、警告を無効化またはリダイレクトすることもできます。error_reporting() および ini ディレクティブ「display_errors」などを参照してください。