勉強したことのメモ

Webエンジニア / プログラマが勉強したことのメモ。

PHPでステータスコードを取得する方法

   2024/01/18  PHP

サーバーの死活監視でUptimeRobotを使っていたけど、どうも正常に監視してくれないサイトがあった。UptimeRobot側ではサーバーダウン状態になっているけど、サイト側は正常に閲覧できるという状態。

原因が分からないので、それであれば簡易の死活管理ツールを作ろうと思った。で、ステータスコードを取得する方法をメモ。

 

ソースコード

$header = null;
$options = array(
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HEADER         => true,
    CURLOPT_FOLLOWLOCATION => true,
    CURLOPT_ENCODING       => "",
    CURLOPT_USERAGENT      => "spider",
    CURLOPT_SSL_VERIFYPEER => false,
    CURLOPT_SSL_VERIFYHOST => false,
    CURLOPT_AUTOREFERER    => true,
    CURLOPT_CONNECTTIMEOUT => 120,
    CURLOPT_TIMEOUT        => 120,
    CURLOPT_MAXREDIRS      => 10,
);
$ch = curl_init('http://hogehoge.com'); //ここに調べたいサイトのURLを入れる
curl_setopt_array($ch, $options);
$content = curl_exec($ch);

if(!curl_errno($ch)) {
    $header = curl_getinfo($ch);
}
curl_close($ch);
$status = ($header['http_code'] == 200) ?  true: false; //死活監視なので落ちてるかどうかだけ振り分ける

 

その他

最初はfile_get_contentsで対応しようとしたんだけど、キャッシュの問題なのかテストサーバーでapacheのon/offを切り替えてテストしても、ステータスコードが200のままだった。タイムスタンプとかをGETクエリとして付与しても変わらず。curlだといけた。

あとは障害発生時にアラートメール送信すればUptimeRobotみたく使えそう。

 

参考サイト

http://xirasaya.com/?m=detail&hid=188

 - PHP

  関連記事

PHPからRedisを利用する際のよく使う構文について

PHPからRedisを利用する際のよく使う構文について以下にメモ。   ...

PHPで数値チェック

ページング情報だったりフォーム情報だったりで、 数値かどうかをチェックしたかった ...

定数とグローバル宣言した配列

定数のメリットが分からず、ほとんど使ってこなかったけど 画像用のfunction ...

MySQLで直近に挿入したオートインクリメントの値と次回挿入する値を取得する方法

phpとmysqliを使っている中で次回挿入するオートインクリメントの値と、前回 ...

imgタグのsrc属性のURLにPHPでタイムスタンプを付与しキャッシュ対策する方法

imgタグで画像を表示する際、画像を書き換えても同じものが表示されるというケース ...