PHP -> Auslesen eines Netzwerksockets

maceis

maceis

Aktives Mitglied
Thread Starter
Dabei seit
24.09.2003
Beiträge
16.880
Reaktionspunkte
626
hallo zusammen,

ich habe ein Problem in Zusammenhang mit einer Netzwerkverbindung zu einem pop3 Server, die ich mit PHP aufbaue.
Die Verbindung selbst kann ich problemlos mit fsockopen() herstellen.
Auch die Authentifizierung mit fputs() klappt ohne Probleme, die Serverantworten lese ich mit fgets() ebenfalls erfolgreich aus.

Probleme gibt es erst, wenn ich mit freads() Mails abrufen und deren Text ausgeben möchte.
Bei der ersten Mail klappt das noch, die zweite wird mir nicht mehr ausgegeben.

Hier mal ein Auszug aus dem Skript, das ich für wichtig erachte.
PHP:
...
     17     retr_message($handle, "retr 4\r\n");
     18     retr_message($handle, "retr 5\r\n");
...
     80 function retr_message($handle, $command)
     81 {
     82     // retr-Befehl an Server senden
     83     fputs($handle, $command);
     84     // retr- Befehl im Browser ausgeben
     85     $command="<font color=blue>".($command)."</font>";
     86     echo $command;
     87     // Antwort des Servers in Variable speichern
     88     $buffer = fread($handle,128);
     89     while (!feof($handle))
     90     {
     91         $buffer .= fread($handle, 128);
     92     $status= socket_get_status($handle);
     93     } 
     94     // Antwort des Servers am Browser ausgeben
     95     echo "<font color=maroon".nl2br($buffer)."</font>";
     96     // $status['eof']=0;
     97     show_status($status, "navy");
     98 }
...

Vielleich kann mir mal jemand einen Tip geben.

Nur Mail 4 wird am Browser ausgegeben.

Was mir noch aufgefallen ist:
Beim Sniffen mit dem ethereal ist mir aufgefallen, dass die Mail schon lang gesendet wurde, die Seite im Browser aber erst rund 1 Minute später aufgebaut wird.
Die zweite Mail wird gar nicht vom Server gesendet obwohl das retr 5 Kommando gesendet wird.
Ich hatte daher befürchtet, dass das "eof" der ersten mail "stört", allerdings hat ein Zurücksetzen (Zeile 96) auch nichts gebracht.
Ziel ist es, dass ich hintereinander zwei retr-Kommandos an den Server senden kann und mir auf der Seite die beiden Mails hintereinander ausgegeben werden.
 
irgendwelche pipes die noch geflusht werden müssen/sollten?
 
Katana schrieb:
irgendwelche pipes die noch geflusht werden müssen/sollten?
Ich bin mir nicht sicher, ob ich Dich richtig verstehe.
fsockopen(...) sollte mW ähnich funktionieren wie fopen(datei).
Man kann hineinschreiben und daraus lesen.
Nur klappt das nicht so richtig ohne dass ich wüsste, was ich falsch mache.
 
Zuletzt bearbeitet:
ich habe das so verstanden, dass das lesen der daten aus dem socket klappt und die daten auch ankommen, es aber beim senden an den browser erst später angezeigt wird? senden an den browser geht über stdout -> ich dachte deshalb an flush();

siehe http://de.php.net/manual/de/function.flush.php
 
Katana schrieb:
...
es aber beim senden an den browser erst später angezeigt wird? senden an den browser geht über stdout -> ich dachte deshalb an flush();
...
Das ist nur ein Nebeneffekt, der mir aufgefallen ist.
Das Hauptproblem besteht darin, dass nach dem zweiten Kommando "retr #" keine Mail übertragen wird.
Ich hab das flush natürlich dennoch probiert, ergibt aber keine Änderung.
Trotzdem Danke für die Mühe ;)
 
Zurück
Oben Unten