【PHP】URLを渡すとヘッダー情報を見てステータスを返すやつ書いた

投稿日:

例えば、あのURLはきちんと301されているだろうかとか、リンク先とか画像が404になっていないだろうかとか気になって夜も眠れない日は誰にでもあるはずです。唐突。

そんなわけで簡単にではありますがURLを渡すとヘッダー情報(get_headers)を見て、参照先URLのステータスを返す関数を書いてみました。
※ タイトルはキリッとしてますが大したものじゃありません
http://jp2.php.net/manual/ja/function.get-headers.php#119497 のほぼ完コピです。すいません。

2017/08/16 追記 クラスにしてみました

【PHP】URLを渡すとヘッダー情報を見てステータスを返すクラスを書いた | Shimabox Blog

ソースはこちら。

ソース

Example

YahooのURLを渡してみる

$ret = getUrlStatus('http://m.yahoo.co.jp');
var_dump($ret);

/*
object(stdClass)#1 (10) {
  ["url"]=>
  string(20) "http://m.yahoo.co.jp"
  ["reachedUrl"]=>
  string(24) "https://www.yahoo.co.jp/"
  ["isValid"]=>
  bool(true)
  ["redirectedUrls"]=>
  array(2) {
    [0]=>
    string(26) "https://m.yahoo.co.jp:443/"
    [1]=>
    string(24) "https://www.yahoo.co.jp/"
  }
  ["redirectedCode"]=>
  array(2) {
    [0]=>
    int(301)
    [1]=>
    int(302)
  }
  ["code"]=>
  int(200)
  ["is200"]=>
  bool(true)
  ["is403"]=>
  bool(false)
  ["is404"]=>
  bool(false)
  ["is500"]=>
  bool(false)
}
*/

これを見た感じ、http://m.yahoo.co.jp を渡すと、

  • まず、https://m.yahoo.co.jp:443/ に 301 リダイレクト
  • さらに、https://www.yahoo.co.jp/ に 302 リダイレクト
  • そして、HTTPステータスコード200 を返却

されていることがわかります。

適当な画像を指定してみる

$ret = getUrlStatus('https://example.com/hoge.png');
var_dump($ret);

/*
object(stdClass)#1 (10) {
  ["url"]=>
  string(28) "https://example.com/hoge.png"
  ["reachedUrl"]=>
  string(28) "https://example.com/hoge.png"
  ["isValid"]=>
  bool(true)
  ["redirectedUrls"]=>
  array(0) {
  }
  ["redirectedCode"]=>
  array(0) {
  }
  ["code"]=>
  int(404)
  ["is200"]=>
  bool(false)
  ["is403"]=>
  bool(false)
  ["is404"]=>
  bool(true)
  ["is500"]=>
  bool(false)
}
*/

var_dump($ret->is404 === true); // => true

is404trueとなります。

おまけ (POSTの場合)

$data = http_build_query(['foo' => 'bar', 'hoge' => 'piyo']);
$header = [
    'Content-Type: application/x-www-form-urlencoded',
    'Content-Length: ' . strlen($data)
];
$options = [
    'http' => [
        'method'  => 'POST',
        'header'  => implode("\r\n", $header),
        'content' => $data
    ]
];

$ret = getUrlStatus('http://localhost/post.php', $options);

第二引数にstream_context_set_default()で使うオプションを渡してください。
PHP: stream_context_set_default – Manual

まとめ

冒頭で述べたとおり http://jp2.php.net/manual/ja/function.get-headers.php#119497 をほぼ参考にして書きましたが、うまくPHPUnitseleniumなどと組み合わせるといいかもしれません。

投稿日:
カテゴリー: PHPUnitPHP

作成者: shimabox

Web系のプログラマをやっています。 なるべく楽しく生きていきたい。

コメントする

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

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください