Downloadstream bei zu langem Stream abbrechen
Downloadstream bei zu langem Stream abbrechen
am 11.06.2006 17:27:17 von Peter Stoss
Hallo zusammen,
kurz zur Erläuterung, ich rufe auf einem Server eine URL auf und
erhalte als Rückmeldung ein paar Zeilen zurück.
$url =3D "http://www.irgendwo.de/irgendeinscript-das-mir-output-gibt. php
$data =3D substr(file_get_contents($data),0,-1);
Neulich passierte es, dass auf diesem Server Probleme auftraten und
sich dort scheinbar eine Schleife endlos wieder aufrief. Das hatte zur
Folge, dass der Output immer länger wurde und nie abgebrochen hat. Es
folgt immer nur mehr Output, kein EOF oder ähnliches.
Gibt es eine Möglichkeit für mich als aufrufenden 'Client' meinem
PHP-Script zu sagen: "wenn der Output länger als x Bytes oder so ist",
dann brich den ganzen get sofort ab. Sonst würde sich auch mein Script
aufhängen.
Danke!
Peter.
Re: Downloadstream bei zu langem Stream abbrechen
am 11.06.2006 19:10:04 von Rene Schleicher
Am Sun, 11 Jun 2006 08:27:17 -0700 schrieb Peter Stoss:
> Neulich passierte es, dass auf diesem Server Probleme auftraten und
> sich dort scheinbar eine Schleife endlos wieder aufrief. Das hatte zur
> Folge, dass der Output immer länger wurde und nie abgebrochen hat. Es
> folgt immer nur mehr Output, kein EOF oder ähnliches.
>
> Gibt es eine Möglichkeit für mich als aufrufenden 'Client' meinem
> PHP-Script zu sagen: "wenn der Output länger als x Bytes oder so ist",
> dann brich den ganzen get sofort ab. Sonst würde sich auch mein Script
> aufhängen.
Ab PHP 5.1.0 [1] (Abfrage von hoechstens 30 Zeichen):
,----
| file_get_contents ("http://url/file.php", FALSE, NULL, 0, 30);
`----
Ansonsten wuerde ich zum Beispiel fopen/fgets benutzen.
[1] http://de3.php.net/manual/en/function.file-get-contents.php
HTH,
Rene
Re: Downloadstream bei zu langem Stream abbrechen
am 14.06.2006 18:57:29 von Peter Stoss
Rene Schleicher schrieb:
> ,----
> | file_get_contents ("http://url/file.php", FALSE, NULL, 0, 30);
> `----
>
> Ansonsten wuerde ich zum Beispiel fopen/fgets benutzen.
Hallo Rene,
mir steht leider definitv nur PHP 4.3.10 zur Verfügung, so dass
file_get_contents mir da leider nicth weiterhilft. Ich habe mir mal
fopen/fgets angeguckt, finde aber nichts entsprechendes.
Kannst du mir mal nen Codeschnippsel entsprechend aufzeigen, wie ichs
lösen kann?
Danke!
Peter.
Re: Downloadstream bei zu langem Stream abbrechen
am 15.06.2006 17:09:02 von Rene Schleicher
Hallo Peter,
Thus spake Peter Stoss:
> mir steht leider definitv nur PHP 4.3.10 zur Verfügung, so dass
> file_get_contents mir da leider nicth weiterhilft. Ich habe mir mal
> fopen/fgets angeguckt, finde aber nichts entsprechendes.
> Kannst du mir mal nen Codeschnippsel entsprechend aufzeigen, wie ichs
> lösen kann?
Mittels fread() [1]:
,---
|
| $url = 'http://foo.bar/script.php';
| $maxLen = 309;
|
| if ($fd = fopen ($url, 'r'))
| {
| $text = fread($fd, $maxLen);
|
| echo strlen($text).": ".$text;
|
| fclose ($fd);
| }
| ?>
`---
Mittels fgets() [2]:
,---
|
| $url = 'http://foo.bar/script.php';
| $maxLen = 10;
|
| if ($fd = fopen ($url, 'r'))
| {
| $buf = fgets ($fd, $maxLen);
| echo $buf;
| fclose ($fd);
| }
| ?>
`---
Allerdings funktioniert das so nur (fgets), wenn Dein Script, von welchem
Du die Ausgabe holst, keine Zeilenumbrueche ausgibt - falls zum Beispiel
nach 5 Zeichen ein Zeilenumbruch stuende, wuerden nur 5 statt 10 Zeichen
geholt. Nicht getestete Alternative hierzu:
,---
|
| $url = 'http://foo.bar/script.php';
| $maxLen = 309;
| $chunks = 64;
|
| if ($fd = fopen ($url, 'r'))
| {
| while ($fetchedChars < $maxLen && !feof($fd))
| {
| $buf = fgets ($fd,
| ($fetchedChars+$chunks>$maxLen)?$maxLen-$fetchedChars+1:$chu nks);
| $text .= $buf;
| $fetchedChars += strlen ($buf);
| }
|
| echo strlen($text);
|
| fclose ($fd);
| }
| ?>
`---
[1] http://de3.php.net/manual/en/function.fread.php
[2] http://de3.php.net/manual/en/function.fgets.php
Gruesse,
Rene
Re: Downloadstream bei zu langem Stream abbrechen
am 16.06.2006 22:02:16 von Peter Stoss
Hallo Rene,
scheint mit fopen einwandfrei zu gehen, danke!
Henning