勉強したことのメモ

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のカレンダー関数

カレンダー関数で使えるかもしれないものをメモ。 ■cal_days_in_mon ...

jQuery.uploadでリアルタイムプレビュー

やりたい事は、 ・<input type="file">で画像を選択 ...

PHPからMySQLにシリアライズしたデータを格納

アンケートフォームみたいなのがあって、 今後も定期開催し、尚且つ質問内容は増減す ...

ソシャゲのガチャのように当選確率が異なる抽選システムをPHPで作成する方法

ソシャゲのガチャみたいな当選確率が異なる抽選システムをPHPで作成したかった。具 ...

PHPでaタグにnofollowを付ける

タイトルそのまま、リンクがあった場合に nofollowつけてくれ、というもの。 ...