2011-09-10 6 views
9

私はPHPを使用できるサーバーと、インターネットからpingできるルーターを持っています。私は次の結果を使って5分ごとにルータにpingを送信するPHPスクリプトを書いたがっています:PHPでpingアップタイムサービスを作成する

  • pingが成功すると何も起こりません。
  • pingに失敗した場合は数分待ってから失敗すると、自分の電子メールアドレスに警告を1回送信します。
  • ルータが再びping可能になると、それは正常であるという電子メールを送信します。

これはPHPで行うことができますか?どうやって?誰もこれを行うPHPファイルがありますか?

+0

は、より良いcronジョブの音を使用していないでしょうか? – ajreal

答えて

9

以下、私はあなたが求めるものを行う簡単なPHPスクリプトを書いています。サーバーにpingを実行し、結果をテキストファイル(「up」または「down」)に記録し、前回の結果が上か下かに応じて電子メールを送信します。

5分ごとに実行するには、5分ごとにPHPスクリプトを呼び出すようにcronジョブを設定する必要があります。 (多くの共有Webホストあなたはcronジョブを設定することができ;方法を見つけるためにあなたのホスティングプロバイダのマニュアルを参照してください)

<?php 

//Config information 
$email = "[email protected]"; 
$server = "google.com"; //the address to test, without the "http://" 
$port = "80"; 


//Create a text file to store the result of the ping for comparison 
$db = "pingdata.txt"; 

if (file_exists($db)): 
    $previous_status = file_get_contents($db, true); 
else: 
    file_put_contents($db, "up"); 
    $previous_status = "up"; 
endif; 

//Ping the server and check if it's up 
$current_status = ping($server, $port, 10); 

//If it's down, log it and/or email the owner 
if ($current_status == "down"): 

    echo "Server is down! "; 
    file_put_contents($db, "down"); 

    if ($previous_status == "down"): 
     mail($email, "Server is down", "Your server is down."); 
     echo "Email sent.";  
    endif; 

else: 

    echo "Server is up! "; 
    file_put_contents($db, "up"); 

    if ($previous_status == "down"): 
     mail($email, "Server is up", "Your server is back up."); 
     echo "Email sent."; 
    endif; 

endif; 


function ping($host, $port, $timeout) 
{ 
    $tB = microtime(true); 
    $fP = fSockOpen($host, $port, $errno, $errstr, $timeout); 
    if (!$fP) { return "down"; } 
    $tA = microtime(true); 
    return round((($tA - $tB) * 1000), 0)." ms"; 
} 
+0

PHPにネイティブping機能はありませんので、このスクリプトを使用しようとするとhttp://stackoverflow.com/questions/1239068/ping-site-and-return-result-in-phpを見てください。もちろん、http://www.nagios.org/ – CodeReaper

+2

@ CodeReaperのような監視システムを使うこともできます。スクリプトにはすでにそのping機能が含まれています。 – Nick

+0

悪い、私のipadでサーフィンしていたとしようとし、下にスクロールするとは思わなかった。 – CodeReaper

3

それは、インターネットからpingを実行することができ、HTTPを実行している場合、私は個人的にPingdomのサービスを使用しますサーバーがその上にあります。本当に特別なスクリプトを書くことに深く関わる必要はありません。

+1

50以上のウェブサイトを監視しようとすると高額になります。 –

0

だけでなく、これまで私はあなたがPHPでcronジョブを作成することはできません知っているが、何を行うことができますすることもあなたの代わりに

を実行することができますので、あなたが必要なホストにpingを実行することができるようになります

this使用のcrontabであるとして スクリプト内

exec("ping 1.2.3.4")

関連する問題