[PHP] 対象サーバーのPING確認

2016年1月5日

PHP Tips サーバー テクノロジー

WEBサイトを使ってサーバーの生き死に確認を行うことは、複数のサーバー管理を行う上で必須です。 shellスクリプトを使う場合は「PING」コマンドで確認ができるが、PHPを使った方法をいくつか考えてみた。 javascriptでAJAXを使って定期的にサーバー生存確認を行うことで、サイトでリアルタイムに行うことが可能になる。

fsockopenを使ってPING

$host = "192.168.1.1"; $port = 80; $timeout = 1; $fP = fSockOpen($host, $port, $errno, $errstr, $timeout); $res = ($fP) ? 1 : 0; fclose($fP); echo $res; $hostで対象サーバーのアドレスを登録しよう。 サーバーが起動している時は「1」、ダウンしている時は「0」が表示される。 この方法では、80番ポートに送信しているので、webサーバーしか確認ができない。

execコマンドを使ってPING

$host = '192.168.1.17'; $r = exec(sprintf('ping -c 1 -W 1 %s', escapeshellarg($host)), $res, $rval); echo $rval === 0; 今回は、execを使ってシステムコマンドを使って扱っている。PINGコマンドでオプションを使っているのでLINUX専用だが、精度は悪く無い。 「-W」でタイムアウトを1秒にセットしているが、よほど遠くのサーバーを確認しないかぎり問題ないはずだ。

htmlにセットしてみる

<div id="ping">--</div> <script> /** * Ajax */ var $$ = {}; $$.ajax = { xmlObj:function(f){ var r=null; try{ r=new XMLHttpRequest(); } catch(e){ try{ r=new ActiveXObject("Msxml2.XMLHTTP"); } catch(e){ try{ r=new ActiveXObject("Microsoft.XMLHTTP"); } catch(e){ return null; } } } return r; }, /** * XMLHttpRequestオブジェクト生成 */ set:function( option ){ if(!option){return} $$.ajax.httpoj = $$.ajax.createHttpRequest(); if(!$$.ajax.httpoj){return;} //open メソッド; $$.ajax.httpoj.open( option.method , option.url , option.async ); $$.ajax.httpoj.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); //受信時に起動するイベント; $$.ajax.httpoj.onreadystatechange = function(){ //readyState値は4で受信完了; if ($$.ajax.httpoj.readyState==4){ //コールバック option.onSuccess($$.ajax.httpoj.responseText); } }; //query整形 var data = []; if(typeof(option.query)!="undefined"){ for(var i in option.query){ data.push(i+"="+encodeURIComponent(option.query[i])); } } if(typeof(option.querys)!="undefined"){ for(var i=0;i<option.querys.length;i++){ data.push(option.querys[i][0]+"="+encodeURIComponent(option.querys[i][1])); } } //send メソッド if(data.length){//console.log(data.join("&")); $$.ajax.httpoj.send( data.join("&") ); } else{ $$.ajax.httpoj.send( "" ); } }, createHttpRequest:function(){ //Win ie用 if(window.ActiveXObject){ try { //MSXML2以降用; return new ActiveXObject("Msxml2.XMLHTTP") } catch(e){ try { //旧MSXML用; return new ActiveXObject("Microsoft.XMLHTTP") } catch(e2){ return null } } } //Win ie以外のXMLHttpRequestオブジェクト実装ブラウザ用; else if(window.XMLHttpRequest){ return new XMLHttpRequest() } else{ return null } }, //コールバック関数 ( 受信時に実行されます ); onSuccess:function(oj){ //レスポンスを取得; var res = oj.responseText;console.log(res); //ダイアログで表示; if(res && res.match(/^[a-z|$]/)){ eval(res); } } }; $$.init = function(){ $$.ajax.set({ url:"ping.php", method:"post", async:true, onSuccess:function(res){ $$.setMessage(res); setTimeout($$.init,3000); } }); }; </script> 「ping.php」は先述したPHPのどちらかのバージョンを書き込んでおけば、3秒毎に確認を行い、生き死に確認ができるWEBページが作れる。 もっと簡単に行えればいいのだが・・・

このブログを検索

ごあいさつ

このWebサイトは、独自思考で我が道を行くユゲタの少し尖った思考のTechブログです。 毎日興味がどんどん切り替わるので、テーマはマルチになっています。 もしかしたらアイデアに困っている人の助けになるかもしれません。