PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Timeoutlimit beim öffnen einer Datei setzen



Berufspenner
16-04-2003, 16:30
Hi@all

Ist es möglich, dass, wenn ich z.B. mit fopen() eine Datei öffnen möchte, ich dem ganzen eine Zeit von ca. 3 Sekunden oder so gebe? Wenn die Datei innerhalb dieser Zeit nicht geöffnet wurde wird der boolsche Wert fals zurückgegeben, aber das Script soll nicht einfach abbrechen, da das ganz an eine Bedingung angeschlossen ist.

Cu
André

Gaert
16-04-2003, 16:47
Hallo!
Ich würds folgendermaßen machen
Ein Prozess, der den anderen Überwacht und anhält, falls er länger als eine vorbestimmte Zeit läuft... hmm... stichwort Multithreading, aber das geht mit PHP nicht.
Du könntest natürlich mal in den PHP Sourcen stöbern und die fopen Funktion so manipulieren, dass sie nach drei Sekunden abbricht... aber das ist wohl auch keine Lösung ;)
Vielleicht fällt ja noch jemandem was ein.

Berufspenner
16-04-2003, 17:26
Hi
Original geschrieben von Gaert
Hallo!
Ich würds folgendermaßen machen
Ein Prozess, der den anderen Überwacht und anhält, falls er länger als eine vorbestimmte Zeit läuft... hmm... stichwort Multithreading, aber das geht mit PHP nicht.
Du könntest natürlich mal in den PHP Sourcen stöbern und die fopen Funktion so manipulieren, dass sie nach drei Sekunden abbricht... aber das ist wohl auch keine Lösung ;)
Vielleicht fällt ja noch jemandem was ein. Gut, so hab ich mir die Lösung nun nicht vorgestellt ;) Vieleicht geh ich da aber auch falsch herran. Wäre wohl besser, wenn ich mein Vorhaben schildere. Also ich möchte eigentlich eine simple Erreichbarkeitsprobe in php basteln. Wenn die abzufragende Seite erreichbar ist soll auf sie weitergeleitet werden, mit header() hat das nicht klappen wollen :confused:, wenn sie nicht erreichbar ist soll ein Text ausgegeben werden.

Cu
André

The Ripper
17-04-2003, 11:00
Die Erreichbarkeit eines (HTTP-)Server kannnst du mit dieser Funktion überprüfen:

function getAvailability($server)
{
if (!($sock = fsockopen($server, 80, $errno, $errstr, 5)))
return false;

fputs($sock, "HEAD / HTTP/1.0\r\nHost: $server\r\n\r\n");

while (!feof($sock))
$tmp = fgets($sock, 1024);

fclose($sock);

return true;
}
Die 5 beim fsockopen()-Aufruf ist übrigens das Timeout nach dem du gesucht hast ;)

Berufspenner
17-04-2003, 17:12
Hi@all

Ahh...danke. Das sieht ja schon mal gut aus. Werd es dann mal testen. Vielen Dank.

Cu
Andre

Berufspenner
18-04-2003, 11:24
Hi@all

Also irgenwie wird, obwohl der Server erreichbar ist, der Funktionswert auf false gestzt. Ich weis jetzt nicht, ob ich vieleicht bei der Außführung falsch gemacht habe. Hier mal der code
<?php
function getAvailability($server)
{
if (!($sock = fsockopen($server, 80, $errno, $errstr, 10)))
return false;

fputs($sock, "HEAD / HTTP/1.0\r\nHost: $server\r\n\r\n");

while (!feof($sock))
$tmp = fgets($sock, 1024);

fclose($sock);

return true;
}

$server = "http://serve1.dyndns.org";
$test = getAvailability($server);

if($test == true)
{
echo "<a href=http://serve1.dyndns.org>Hier geht es weiter</a>";

}
else
{
echo "Da der Server, noch, nicht bei einem Provider sondern bei mir zu Hause steht<br>";
echo "kann es sein, dass er, wie jetzt auch, nicht erreichbar ist. Versuch es bitte später nochmal.";
echo "<br><br>";
echo "<a href=mailto:webmaster@islandpferdeforum.de>webmaster@islandpferdeforum.de</a>";
}
?>Hab ich was falsch gemacht, oder wo könnte der Fehler stecken?

Cu
André

Berufspenner
18-04-2003, 18:16
Hi@all

Hat denn keiner eine Idee? Ich will ja niemanden drengen oder meine Arbeit machen lassen. Ich brauche hierbei halt Hilfe.

Cu
André

The Ripper
18-04-2003, 20:27
Hi,

der fehler liegt hier:

$server = "http://serve1.dyndns.org";
Die Funktion kann nicht mit URLs umgehen, richtig wäre:

$server = "serve1.dyndns.org";

Berufspenner
18-04-2003, 22:06
Hi@all

Ahja, jetzt klappt es. In der Funktion ist ja auch schon der Port angegeben. Ich glaub, ich brauch eine Brille ;)

Cu
André