2011-09-10 12 views
9

PHP'yi kullanabileceğim bir sunucu ve Internet'ten ping gönderilebilen bir yönlendiricim var. Aşağıdaki sonuçlarla her 5 dakikada bir yönlendiriciye bir ping gönderen bir PHP betiği yazmak istiyorum:PHP ile bir ping çalışma zamanı hizmeti oluşturma

  • Ping başarılı olursa, hiçbir şey olmaz.
  • Ping başarısız olursa, birkaç dakika bekler ve hala başarısız olursa e-posta adresime bir kez bir uyarı gönderir.
  • Yöneltici tekrar pingable yaptıktan sonra, bir e-posta gönderir.

Bu PHP ile yapılabilir mi? Nasıl? Kimse bunu yapan bir küçük PHP dosyası var mı?

+0

bir cron işi daha iyi ses kullanarak olmaz mı? – ajreal

cevap

9

Aşağıda, sorduğunuz şeyi yapan basit bir PHP betiği yazdım. Bir sunucuya ping atar, sonucu bir metin dosyasına ("yukarı" veya "aşağı") yazar ve önceki sonucun yukarı ya da aşağı olmasına bağlı olarak bir e-posta gönderir.

Her beş dakikada bir çalışmasını sağlamak için, PHP betiğini her beş dakikada bir çağırmak üzere bir cron işi yapılandırmanız gerekir. (Birçok paylaşılan web host cron işleri kurma izni;. Öğrenmek için barındırma sağlayıcınızın belgelerine başvurun)

<?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'de yerel ping işlevi yoktur, bu nedenle bu betiği kullanmaya kalkarsanız http://stackoverflow.com/questions/1239068/ping-site-and-return-result-in-php adresine bir göz atın ... veya elbette http://www.nagios.org/ – CodeReaper

+2

@CodeReaper gibi bir izleme sistemi kullanın. Komut dosyası zaten ping işlevini içerir. – Nick

+0

, kötü, benim ipad üzerinde sörf ve denemek ve aşağı kaydırmak için düşünmüyordu. – CodeReaper

3

Ben şahsen Pingdom servisini kullanmak internetten ping edilebilir ve bir HTTP çalışıyorsa sunucuda. Özel bir senaryo yazmaya gerçekten gerek yok.

+1

50'den fazla web sitesini izlemeye çalışırken pahalı olabilir. –

0

sıra kadarıyla ben PHP ile bir cronjob oluşturamazsınız biliyorum ama ne yapabilirim de yerine

çalışabilmesi için gerekli ana bilgisayara ping mümkün olacak

ve this kullanım crontab olduğu gibi betiğinizdeki

exec("ping 1.2.3.4")