2011-09-10 10 views
9

Possiedo un server su cui posso utilizzare PHP e un router che può essere eseguito il ping da Internet. Voglio scrivere uno script PHP che invia un ping al router ogni 5 minuti con i seguenti risultati:Creazione di un servizio di uptime ping con PHP

  • Se il ping ha esito positivo, non succede nulla.
  • Se il ping non riesce, attende alcuni minuti e, se continua a funzionare, invia un avvertimento al mio indirizzo e-mail una volta.
  • Dopo che il router è nuovamente pingable, invia un'e-mail che va bene.

Questo potrebbe essere fatto con PHP? Come? Qualcuno ha un file PHP piccolo che lo fa?

+0

non sarebbe utilizzando un processo di cron suono migliore? – ajreal

risposta

9

Di seguito ho scritto un semplice script PHP che fa ciò che chiedi. Esegue il ping di un server, registra il risultato in un file di testo ("su" o "giù") e invia un'e-mail a seconda che il risultato precedente sia in alto o in basso.

Per farlo funzionare ogni cinque minuti, è necessario configurare un processo cron per chiamare lo script PHP ogni cinque minuti. (Molti web host condiviso consentono di impostare cron jobs;. Consultare la documentazione del fornitore di hosting per scoprire come)

<?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

Non c'è alcuna funzione ping nativa in PHP, quindi dai un'occhiata a http://stackoverflow.com/questions/1239068/ping-site-and-return-result-in-php se tenti di usare questo script ... o, naturalmente, utilizzare un sistema di monitoraggio come http://www.nagios.org/ – CodeReaper

+2

@CodeReaper Lo script include già quella funzione di ping. – Nick

+0

di cattivo, stava navigando sul mio ipad e non ho pensato di provare a scorrere verso il basso. – CodeReaper

3

Io personalmente uso il servizio Pingdom se può essere eseguito il ping da Internet ed è in esecuzione un HTTP server su di esso. Non c'è bisogno di andare veramente a fondo nella scrittura di una sceneggiatura speciale.

+1

Può essere costoso quando si tenta di monitorare più di 50 siti Web. –

0

così come per quanto ne so non è possibile creare un cronjob con PHP, ma cosa si può fare è utilizzare crontab

e this in modo da essere in grado di eseguire il ping all'host richiesta inoltre è possibile eseguire invece

exec("ping 1.2.3.4")

nello script