Ich habe unter PHP 4.3.1 sowie PHP 4.3.3 auf Apache unter WinXP folgende Beobachtung. Lese ich mit fgets() eine Textdatei Zeile für Zeile ein, so bleibt der Dateizeiger, den ftell() mitteilt, so viele Bytes hinter der "tatsächlichen" Position wie viele Zeilenumbrüche mit "\r\n" die einzulesende Datei bis zur Position enthält. Dazu ein Script:
Die Zeile mit ftell(), die IMHO rein gar nix nichts bewirken soll, sorgt bei mir im Beispiel mit einer beliebigen DOS-Kodierten Textdatei (beispiel.php?fn=text.txt) dafür, dass der Zeiger ein Byte zurückgestellt wird und "\n" noch mals durch fgets() ausgelesen wird. Dadurch kommt immer wieder eine Leerzeile in die Ausgabe.
Auf PHP 4.2.2 unter WinNT geht alles ohne Fehler. Kann jemand reproduzieren? Könnte ein Bug sein oder ein Feature?
PHP-Code:
<?
ini_set("auto_detect_line_endings", true); // Scheint egal
$file=fopen($fn,"rt"); // Mit ohne ohne "t" scheint auch egal
$linenumber=0;
while ($file && $line=fgets($file, 65536))
{ echo ("$linenumber: $line\n");
fseek($file, ftell($file), SEEK_SET); // Auf diese Zeile kommts an
$linenumber++;
}
fclose($file);
?>
Auf PHP 4.2.2 unter WinNT geht alles ohne Fehler. Kann jemand reproduzieren? Könnte ein Bug sein oder ein Feature?