Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > de.comp.lang.php > #4618
| From | Arno Welzel <usenet@arnowelzel.de> |
|---|---|
| Newsgroups | de.comp.lang.php |
| Subject | Re: fget mit unbekannt Länge einlesen |
| Date | 2020-10-28 21:11 +0100 |
| Message-ID | <hvu1k3Fj2roU1@mid.individual.net> (permalink) |
| References | <rnb9fp$3q7$1@news.dns-netz.com> |
Timo S.:
> Guten Morgen,
>
> ich sitze gerade an einer Funktion mit fsockopen,
> die von eine Liste mit Fehlern von einem Serverport abfragt.
>
> Dabei steht jeder Fehler in einer eigenen Zeile und die Liste
> der Fehler ist mal leer und auch mal schnell mehrere hundert Zeilen groß.
>
> Wie bringe ich PHP bzw. fgets dazu, alles einschließlich der letzten
> Zeile in die Variable $ErrorList_Response zu schreiben.
> Aktuell wird nur die erste Zeile in $ErrorList_Response gespeichert.
>
> Meine Abfrage der Zeile sieht wie folgt aus:
>
> fputs( $smtpConnect, "LIST" . $newLine );
> $ErrorList_Response .= fgets( $smtpConnect, 1024 );
>
> Hat jemand eine Idee und einen Lösungsansatz für mich?
Generell wäre socket_read() dafür sinnvoller.
Ganz simpel:
$ErrorList_Response .= socket_read($smtpConnect, 1024);
Wobei 1024 ja auch zu wenig sein könnte:
$ErrorList_Response .= socket_read($smtpConnect, 16384);
Die ausführlichere Variante:
$done = false;
$timeOut = 10;
$data = '';
while (!$done && $timeOut > 0) {
$listRead = [$smtpConnect];
$listWrite = null;
$listExcept = null;
$socketRead = @socket_select($listRead, $listWrite, $listExcept, 1);
if($socketRead) {
$runtime = 0;
$buffer = socket_read($smtpConnect, 8192);
if (strlen($buffer) > 0) {
$data .= $buf;
} else {
$done = true;
}
} else {
$timeOut--;
}
}
Die Idee dabei:
Man fragt mit socket_select() ab, ob am Socket noch etwas zu lesen und
vermeidet so einen Hänger, wenn der angesprochene Server nichts
zurückschickt.
Wenn etwas bereitsteht, liest dann bis zu 8 KB ein. Wenn es nichts mehr
zu lesen gibt, gibt man dem Sender noch maximal 10 Sekunden Zeit und
bricht dann ab - wobei man jeweils einmal pro Sekunde prüft.
--
Arno Welzel
https://arnowelzel.de
Back to de.comp.lang.php | Previous | Next — Previous in thread | Find similar
fget mit unbekannt Länge einlesen "Timo S." <usenetpostfach@host4admin.de> - 2020-10-28 09:17 +0100
Re: fget mit unbekannt Länge einlesen k@rl.pflaesterer.de (Karl Pflästerer) - 2020-10-28 15:17 +0100
Re: fget mit unbekannt Länge einlesen Timo <usenetpostfach@host4admin.de> - 2020-10-28 17:11 +0100
Re: fget mit unbekannt Länge einlesen Arno Welzel <usenet@arnowelzel.de> - 2020-10-28 21:11 +0100
csiph-web