
WEBサイトがダウンしているか生きているか判別することを目的に、サーバーステータスチェッカーを作りました。
論よりコード
<?php
/**
* WEBサイトオンラインorオフライン診断
* @param string $site ホスト
* @return boolean[] true | string[] 応答時間 | string[] HTTPコード
* @return boolean[] false | string[] 応答無し | string[] unknown
*/
function itIsOnline($site) {
// 新規cURLリソースを作成します。
$curlInit = curl_init($site);
// オプションを設定します。
curl_setopt($curlInit, CURLOPT_CONNECTTIMEOUT, 20);
curl_setopt($curlInit, CURLOPT_TIMEOUT, 20);
curl_setopt($curlInit, CURLOPT_HEADER, true);
curl_setopt($curlInit, CURLOPT_NOBODY, true);
curl_setopt($curlInit, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curlInit, CURLOPT_FOLLOWLOCATION, true);
// URLを取得して応答データをブラウザに渡します。
$response = curl_exec($curlInit);
// 応答データ詳細情報を取得します。
$info = curl_getinfo($curlInit);
// 応答時間を取得します。
$response_time = substr($info['total_time'], 0, 4);
// HTTPコードを取得します。
$http_code = $info['http_code'];
// cURLリソースを閉じてシステムリソースを解放します。
curl_close($curlInit);
if ($response)
return array(true, $response_time, $http_code);
return array(false, "応答無し", "unknown");
}
// 以下、使用例。
$url = Trim(htmlspecialchars('https://rajaka.net/'));
$url = strtolower($url);
$url = str_replace(array('http://', 'https://'), '', $url);
$url = Trim("http://$url");
if (!filter_var($url, FILTER_VALIDATE_URL) === false) {
$url = parse_url(Trim($url));
$host = $url['host'];
$myHost = str_replace('www.', '', $host);
$res = itIsOnline($host);
$stats =($res[0] == true ? "オンラインです。" : "オフラインです。");
$response_time = $res[1]."秒";
$http_code = $res[2];
}
echo $myHost.'は現在'.$stats.'応答時間は'.$response_time.'でHTTPコードは『'.$http_code.'』です。';
?>
ポイント
curl_exec()の返り値によって生きているかダウンしているかを判別します。