OVH Cloud OVH Cloud

Ping et PHP

7 réponses
Avatar
lebuss
Salut à tous, pour tester si plusieurs machines IP sont online ou non,
je souhaite me faire une page en php qui me les affiche toutes ainsi que
leur etat. Mais comment faire un ping en PHP ??
Merci d'avance
lebuss@yahoo.fr

7 réponses

Avatar
Kevin

Salut à tous, pour tester si plusieurs machines IP sont online ou non,
je souhaite me faire une page en php qui me les affiche toutes ainsi que
leur etat. Mais comment faire un ping en PHP ??



Salut,

http://fr.php.net/manual/fr/function.exec.php
en utilisant exec ou autre du meme genre.

Ping etant basé sur icmp avec l'ouverture d'un socket en mode raw, il
n'est pas possible de coder la trame avec socket (a moins d'executer
php en root/administrateur *pas conseillé*)

l'utilitaire ping est dispensé de cette nécéssité pour des raisons
et par des moyens que nous n'évoquerons pas ici...


Kevin

Avatar
Benjamin Sonntag
Salut à tous, pour tester si plusieurs machines IP sont online ou non,
je souhaite me faire une page en php qui me les affiche toutes ainsi que
leur etat. Mais comment faire un ping en PHP ??


A ma connaissance, php ne sait pas envoyer de paquets réseau de type
ICMP (dont le ping fait partie)

Je ne vois donc qu'un

<?php
exec("/bin/ping -c 1 -w 10 ".$machine);
?>

pour répondre à ton attente.

Par ailleurs, tester si une machine est "online" ou non suffit rarement,
tu pourrais plutôt tester directement si elle répond par exemple sur le
ou les ports TCP sur lesquels elle est censée répondre, avec l'aide de
fsockopen().


@+

Benjamin
Metaconsult.

Avatar
Nop
C'est pour des serveurs web ?
Car tu peux avoir ta machine qui répond à un ping, mais ton serveur web par
terre.
Dans ce cas là, ouvrir le port 80, lire et traiter en fonction

"lebuss" a écrit dans le message de news:
43970a6b$0$11003$
Salut à tous, pour tester si plusieurs machines IP sont online ou non, je
souhaite me faire une page en php qui me les affiche toutes ainsi que leur
etat. Mais comment faire un ping en PHP ??
Merci d'avance



Avatar
clifden
Nop wrote:
C'est pour des serveurs web ?


il a pas précisé, c'est peut être du dns, pop, imap, smtp, etc...

Car tu peux avoir ta machine qui répond à un ping, mais ton serveur web par
terre.


C'est en effet 2 choses différentes, et répondre à une requete http sans
répondre à un ping (firewall qui bloque l'icmp mis à part) est en effet
impossible. Mais il vaut mieux pouvoir tester les 2 séparement, et
tester le ping est un préalable.

Dans ce cas là, ouvrir le port 80, lire et traiter en fonction



il va peut être le faire en 2ème étape

Avatar
news1
Hello,

Voici un script qui permet de voir le statut de un ou plusieurs ports
(mais aussi plusieurs serveurs)

Il faut juste duex images (green.gif et red.gif) qui indique l'état

A+


<?php
/////////////////////////////////////////////////////
// Server Monitor v1.0 - sebflipper Copyright 2004 //
// http://www.sebflipper.com //
// //
// This is a simple script to monitor a //
// list of ports from a list of domains //
//
// Don't forget to download green.gif and //
// red.gif for the status icons //
/////////////////////////////////////////////////////

// Config Area
// Enter a list of domain names you want to monitor
$domains = array("charlet.ch","ateliernetcreation.com");
// Enter a list of ports you wish to monitor (80 = HTTP, 21 = FTP, 25 SMTP, 3306 = MySQL)
$ports = array("80", "21", "25", "3306");

// How often the page should refresh
$page_refresh = "300"; // in seconds

?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;
charset=iso-8859-1">
<meta http-equiv="REFRESH" content="<?php echo $page_refresh; ?>">
<title>Server Monitor</title>
<style type="text/css">
<!--
body {
font-family: Arial, Helvetica, sans-serif;
font-size: small;
}
-->
</style>
</head>
</body>
<?php
// PHP Script
// Turn off all error reporting
// Removes errors like fsockopen failed if the script couldn't connect
to the port
error_reporting(0);

// Main moniting function
function server_monitor($domain,$port) {
$fp = fsockopen ($domain, $port, $errno, $errstr, 10);
if (!$fp) {
return "<img src=red.gif alt='Status: Down, Domain: $domain,
Port: $port'>n";
} else {
return "<img src=green.gif alt='Status: Up, Domain: $domain,
Port: $port'>n";
}
fclose($fp);
}

// Foreach array
foreach ($domains as $domain_value) {
echo "<b>Checking $domain_value...</b><br>n";
echo "<table border=1 cellpadding=0 cellspacing=0
bordercolor=#000000><tr>n";
foreach ($ports as $port_value) {
echo "<td>Port: $port_value</td>";
}
echo "</tr>n<tr>n";
foreach ($ports as $port_value) {
echo "<td><center>". server_monitor($domain_value,$port_value)
. "</center></td>n";
}
echo "</tr></table><br><br>n";
}

?>
</body>
</html>
Avatar
Jean-Marc MOLINA
lebuss wrote:
Salut à tous, pour tester si plusieurs machines IP sont online ou non,
je souhaite me faire une page en php qui me les affiche toutes ainsi
que leur etat. Mais comment faire un ping en PHP ??


Tu peux utiliser les fonctions CURL ou les fonctions fsock*.

Avatar
Fred
Salut à tous, pour tester si plusieurs machines IP sont online ou non,
je souhaite me faire une page en php qui me les affiche toutes ainsi que
leur etat. Mais comment faire un ping en PHP ??
Merci d'avance



J'utilise ce script, qui fonctionne bien sous Linux (il me semble qu'il
y a une petite adaptation à faire pour Windows, dans le découpage de la
chaîne) :

<?

// Connexion à la base de données
mysql_connect("localhost", "ping", "pingping");
mysql_select_db("ping");

ping ("une.adr.ip.qqconque");
ping ("www.monsite.com");

function ping($site){
// Execution du ping => reponse du genre rtt min/avg/max/mdev =
69.409/76.128/92.622/9.574 ms, pipe 2
$rep = exec("ping -c 4 $site", $reponse);
$t = split("= ", $rep);
$t2 = split("/", $t[1]);

$sql = "INSERT INTO ping (site, min, moy, max) VALUES ('$site',
'".$t2[0]."', '".$t2[1]."', '".$t2[2]."')";
echo $sql."n";
mysql_query($sql);
}
?>