PHP Code endet in Endlosschleife
-
[cs]Hi!
Ich versuche mich gerade an PHP (Anfaenger).
Folgender Code endet in einer Endlosschleife, weil $length immer 0 ist:
Der Code ist BTW komplett von mir, also nicht aus dem Web zusammengekleistert.function printAll() { $handle = fopen("DATA/TEXT.txt", "cb");//open file, get pointer if($handle === FALSE) echo 'Error opening file!'."\n"; while( !feof( $handle ) )// ? { echo fread( $handle, 15 ).' ';// Print the date $length = 0; fscanf($handle, "%d", $length);//get Length of the text echo " L ".$length; $str = fread($handle, $length + 1);//read text + newline echo $str."\n "; } fclose( $handle); }
Die zu lesende Datei ist Leer! Eigentlich duerfte die Schleife also gar nicht starten. Tut sie aber (siehe Zeile 14, da ist ein "Checkpoint" zum testen).
Wieso startet die Schleife also?
MfG
Edit: Ausserdem wird die
'\n'
Escapesequenz ignoriert (beim Ausgeben). Wieso? Soll ich stattdessen einfach<br />
verwenden?
-
Man testet eigentlich nie auf EOF direkt sondern macht das immer ueber die leseoperationen.
und length aenderst du nie, es ist also immer 0.
-
Shade Of Mine schrieb:
Man testet eigentlich nie auf EOF direkt sondern macht das immer ueber die leseoperationen.
und length aenderst du nie, es ist also immer 0.
Ich komme zwar aus C++, doch ich dachte,
$length
wird auf den Wert des eingelesenen %d gesetzt (wie bei Cs scanf)?
-
Shade Of Mine schrieb:
Man testet eigentlich nie auf EOF direkt sondern macht das immer ueber die leseoperationen.
Alles klar, danke schonmal
-
Alles klar, danke Shade! Das funktioniert schonmal;
Nun folgendes:Die Funktion sieht jetzt so aus:
function printAll() { $handle = fopen("DATA/TEXT.txt", "rb");//open file pointer if($handle === FALSE) { echo 'Error opening file!'."\n"; return; } for(;;) { $date = fread( $handle, 15 ); $length = fscanf($handle, "%d");//get Length of the text $text = fread($handle, $length + 1);//read text + newline if( $date !== FALSE && $length !== FALSE && $text !== FALSE ) echo $date."<br />". $text."<br />";// Print the date else return; } fclose( $handle); }
Ein Fehler war mitunter der Oeffnungsmodus (c), der eigentlich r sein sollte.\
Danke fuer deine Hilfe!
-
du returnst ohne das handle zu closen.
use break..
-
breakme schrieb:
du returnst ohne das handle zu closen.
use break..Stimmt, danke!