[PHP]file_get_contents()でWebページのステータスコードを取得する

Pocket

HTTP で Web ページの内容を取得するには file_get_contents() で可能ですが、サーバーが 404 などのエラーコードを返しても通常の file_get_contents() は false を返すだけでエラーの内容がわかりません。

そこで、stream_context_create() を使って ignore_errors を true にセットするとエラー時であっても取得することができます。

<?php
$url = 'http://example.com';

$options = array(
	'http' => array('ignore_errors' => true)
);
$context = stream_context_create($options);

$result = @file_get_contents($url, false, $context);

$code = 0;
if($result){
	$pattern='#\AHTTP/\d+\.\d+ (\d+) (.*)\E#';
	preg_match($pattern, $http_response_header[0], $matches);
	if(isset($matches[1])) $code = (int)$matches[1];
}

echo $code;

結果:

200

取得したヘッダーは $http_response_header という配列変数に自動的に格納されます。
上の例では正規表現でレスポンスコードの数字を取り出して出力しています。
URL 自体が誤っていてサーバーに辿りつけない場合は file_get_contents は false を返すので「@」を使って Warning エラーを抑制しています。

参考:
http://php.net/manual/ja/function.file-get-contents.php
http://php.net/manual/ja/function.stream-context-create.php


Similar Posts:




コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です