web-dev-qa-db-fra.com

Ping site et retour aboutissent à PHP

J'aimerais créer une petite procédure SI qui vérifiera si Twitter est disponible (contrairement à maintenant, par exemple) et renverra true ou false.

Aidez-moi :)

24
Tomer Lichtash
function urlExists($url=NULL)  
{  
    if($url == NULL) return false;  
    $ch = curl_init($url);  
    curl_setopt($ch, CURLOPT_TIMEOUT, 5);  
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);  
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);  
    $data = curl_exec($ch);  
    $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);  
    curl_close($ch);  
    if($httpcode>=200 && $httpcode<300){  
        return true;  
    } else {  
        return false;  
    }  
}  

Ceci a été récupéré à partir de cet article sur comment vérifier si une URL existe. Parce que Twitter devrait fournir un message d'erreur supérieur à 300 lorsqu'il est en maintenance ou un 404, cela devrait fonctionner parfaitement.

35
Tyler Carter

En voici un:

http://www.planet-source-code.com/vb/scripts/ShowCode.asp?lngWId=8&txtCodeId=1786

Un autre:

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"; 
}

//Echoing it will display the ping if the Host is up, if not it'll say "down".
echo ping("www.google.com", 80, 10);  
21
karim79

Utiliser Shell_exec :

<?php
$output = Shell_exec('ping -c1 google.com');
echo "<pre>$output</pre>";
?>
9
Elzo Valugi

Une autre option (si vous souhaitez/souhaitez effectuer un ping au lieu d'envoyer une requête HTTP) est la classe Ping pour PHP . Je l’ai écrit uniquement dans ce but, et il vous permet d’utiliser une des trois méthodes prises en charge pour effectuer un ping sur un serveur (certains serveurs/environnements ne prennent en charge qu’une des trois méthodes).

Exemple d'utilisation:

require_once('Ping/Ping.php');
$Host = 'www.example.com';
$ping = new Ping($Host);
$latency = $ping->ping();
if ($latency) {
  print 'Latency is ' . $latency . ' ms';
}
else {
  print 'Host could not be reached.';
}
6
geerlingguy

ping est disponible sur presque tous les systèmes d'exploitation. Vous pouvez donc faire un appel système et récupérer le résultat.

5
Philippe Gerber

Avec la fonction suivante, vous envoyez simplement les paquets ICMP purs en utilisant socket_create . J'ai eu le code suivant de une note d'utilisateur là. N.B. Vous devez exécuter ce qui suit sous le nom root.

Bien que vous ne puissiez pas placer cela dans une page Web standard, vous pouvez l'exécuter en tant que tâche cron et remplir une base de données avec les résultats. 

Il est donc préférable que vous surveilliez un site.

function twitterIsUp() {
    return ping('Twitter.com');
}

function ping ($Host, $timeout = 1) {
    /* ICMP ping packet with a pre-calculated checksum */
    $package = "\x08\x00\x7d\x4b\x00\x00\x00\x00PingHost";
    $socket = socket_create(AF_INET, SOCK_RAW, 1);
    socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, array('sec' => $timeout, 'usec' => 0));
    socket_connect($socket, $Host, null);

    $ts = microtime(true);
    socket_send($socket, $package, strLen($package), 0);
    if (socket_read($socket, 255)) {    
        $result = microtime(true) - $ts;
    } else {
        $result = false;
    }
    socket_close($socket);

    return $result;
}
0
icc97

c'est le code php que j'ai utilisé, la réponse est généralement la suivante:

 2 paquets transmis, 2 reçus, 0% de perte de paquet, temps 1089ms 

J'ai donc utilisé un code comme celui-ci:

   

 $ ping_how_many = 2; 
 $ ping_result = Shell_exec ('ping -c'. $ ping_how_many. 'bing.com'); 
 if (! preg_match ('/'.$ ping_how_many.' reçu/', $ ping_result)) {. echo 'Mauvais résultat de ping'. PHP_EOL; 
 // goto next1; 
 } 


0
Fathur Rohim