Moin!
Und in PHP ist \n meines Wissens immer exakt \x0A,
Dann ist dein Wissen falsch. Sagt ueberigens auch das Manual:
\n wird beim 'rausschreiben unter Windows in \015\012
ungewandelt und umgekehrt beim einlesen. Um das zu verhindern,
muessen Dateien im Binary-Modus geoeffnet werden.
Ok, die Dateioperationen sind nochmal was ganz anderes.
Aber grundsätzlich ergibt ein String laut Doku:
http://de3.php.net/manual/de/language.types.string.php#language.types.string.syntax.double
Die Tatsache, dass in den Useranmerkungen dazu keinerlei Diskussion herrscht deutet darauf hin, dass es wohl tatsächlich so ist.
Doch. Such dir einen Hex-Editor deiner Wahl und schaue dir
die Ausgabe von folgendem Posting an:
Was beweist bzw. zeigt dein Codebeispiel? (rhetorische Frage, ich gebe die Antwort am Objekt)
$fd = fopen("file.dat",'w');
fwrite($fd,"\n");
fclose($fd);file.dat:
0000000 0a0d
0000002
Hier wird ein einzelnes LF-Zeichen in eine Datei geschrieben, die im Textmodus (sofern das OS diese Unterscheidung macht) zum Schreiben geöffnet wurde. Dadurch wird das LF konvertiert in ein CRLF (zwei Bytes), die sich im Hexdump auch so zeigen.
$fd = fopen("file.dat.binary",'wb');
fwrite($fd,"\n");
fclose($fd);file.dat.binary:
0000000 000a
0000001
Hier hingegen wird ein einzelnes LF-Zeichen in eine Datei geschrieben, die im Binärmodus geöffnet wurde und deshalb keinerlei Konvertierung stattfindet. Erwartungsgemäß wird das im String enthaltene einzelne Byte des LF in die Datei geschrieben.
Du hast bewiesen, dass "\n" unter PHP immer ein einzelnes LF-Zeichen ist - wie könnte es sonst allein in die Binärdatei gelangen. Wäre "\n" plattformabhängig mal LF, und mal CRLF, dann müßte in beiden Hexdumps mindestens ein CRLF auftauchen.
Merke:
\n === \x0A
\r === \x0D
für alle PHP-Versionen und -Plattformen. Das gilt insbesondere für Stringvergleiche und reguläre Ausdrücke, die diese Zeichen verwenden.
Davon aber ganz unabhängig ist die Tatsache, dass Dateioperationen am Zeilenendekennzeichen durchaus rumfummeln können. Die diesbezügliche Aussage ist also zumindest nicht vollständig korrekt - ich könnte auch "falsch" sagen.
- Sven Rautenberg
ss:) zu:) ls:[ fo:} de:] va:) ch:] sh:) n4:# rl:| br:< js:| ie:( fl:( mo:|