timeout einbauen?

marcc

marcc

Tripel-As
hallo, ich bastl grad mit php und steh vor einem 'kleinen' aber interessanten problem ;)
Ich hab ein scipt auf meiner hp eingebaut um dort zu prüfen ob apache auf meinem heimrechner läuft (ich also on bin..).
das funktioniert auch alles mit dyndns.org.
nur wenn ich eben off bin dauert es 30sek. bis er erkennt dass meine dyndns domain nicht erreichbar ist :(
wie kann man hier ein timeout einbauen, z.b. 5 sek -> dann else zweig oder so?

PHP:
<?
$host = "domain.dyndns.org"; //IP Adresse oder DNS
$check = fsockopen($host, 80); // 80 = HTTP Server
if($check) {

echo "online";

} else {

echo "offline";

}
?>

mfg marc.
 
Mahltid,

Dein Problem ist, dass ein Timeout den Anwendungsfokus schnappen wird, was zur Folge hat, dass nach Ablauf des Timeouts dann immer noch fsockopen abgearbeitet werden muss. Das dürfte die Wartezeit noch verlängern.

pcntl_alarm() im zusammenspiel mit pcntl_exec() trifft es wohl am ehesten via
http://www.php.net/manual/de/intro.pcntl.php
kannst Du Dich zum Thema Prozesskontrolle einlesen...

Könntest aber auch den TTL wert für die Lebensdauer von PP-skripten in deiner PHP-ini neu setzen.

MfG..
 
danke für die schnelle antwort.
Ich hab grad einen kumpel gefragt und der hat mir das geschickt:
PHP:
<?php
system('ping -c 1 www.google.de >>/dev/null', $retval);
if (intval($retval) > 0) {
	echo "offline";
} else {
	echo "online";
}

?>
;) hammer!

sonst wär es wahrscheinlich irgendwie so gegangen:
PHP:
<?php
$fp = fsockopen("www.example.com", 80);
if (!$fp) {
    echo "Unable to open\n";
} else {

    fwrite($fp, "GET / HTTP/1.0\r\n\r\n");
    stream_set_timeout($fp, 2);
    $res = fread($fp, 2000);

    $info = stream_get_meta_data($fp);
    fclose($fp);

    if ($info['timed_out']) {
        echo 'Connection timed out!';
    } else {
        echo $res;
    }
}
?>
habs aber nicht ausprobiert.
 

Ähnliche Themen

Squid nur zum maskieren der eigenen IP, nicht für Webserver auf port 80

SUSe Block Port

Zurück
Oben