wake-up-neo.net

Ping-Site und Rückkehrergebnis PHP

Ich möchte eine kleine IF-Prozedur erstellen, die prüft, ob Twitter verfügbar ist (anders als beispielsweise jetzt) ​​und true oder false zurückgibt.

Hilfe :)

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

Dies wurde aus this post entnommen, um zu überprüfen, ob eine URL existiert. Da Twitter eine Fehlermeldung über 300 während der Wartung oder eine 404-Meldung anzeigen sollte, sollte dies einwandfrei funktionieren.

35
Tyler Carter

Hier ist eins:

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

Ein weiterer:

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

Shell_exec verwenden :

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

Eine weitere Option (wenn Sie statt einer HTTP-Anforderung einen Ping-Befehl benötigen), ist die Ping-Klasse für PHP . Ich habe es nur für diesen Zweck geschrieben und ermöglicht es Ihnen, eine der drei unterstützten Methoden zum Pingen eines Servers zu verwenden (einige Server/Umgebungen unterstützen nur eine der drei Methoden).

Verwendungsbeispiel:

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 ist auf fast jedem Betriebssystem verfügbar. Sie könnten also einen Systemaufruf durchführen und das Ergebnis abrufen.

5
Philippe Gerber

Mit der folgenden Funktion senden Sie nur die reinen ICMP-Pakete mit socket_create . Ich habe dort den folgenden Code von Benutzerhinweis erhalten. N.B. Sie müssen Folgendes als root ausführen.

Obwohl Sie dies nicht in eine Standard-Webseite einfügen können, können Sie es als Cron-Job ausführen und die Ergebnisse mit einer Datenbank füllen. 

Daher ist es am besten geeignet, wenn Sie eine Site überwachen müssen.

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

dies ist PHP-Code, den ich verwendet habe. Die Antwort lautet normalerweise wie folgt:

 2 übertragene Pakete, 2 empfangen, 0% Paketverlust, Zeit 1089ms 

Also habe ich Code wie folgt verwendet:

   

 $ ping_how_many = 2; 
 $ ping_result = Shell_exec ('ping -c'. $ ping_how_many. 'bing.com'); 
 if (! preg_match ('/' .$ ping_how_many. 'erhalten /', $ ping_result)) {
 Echo 'Schlechtes Ping-Ergebnis'. PHP_EOL; 
 // gehe zu next1; 
 } 


0
Fathur Rohim