Wir haben eine 8 GB-Datei, jede Zeile ist eine Ausgabe, so dass es Binärdaten enthalten kann. Aber ich habe bemerkt, dass Daten das 0x0A
Byte nicht enthalten und dieses Byte wird verwendet, um Zeilen in einer Datei zu trennen.Wie liest man eine Datei Zeile für Zeile in PHP, wenn Zeilen mit 0x0A getrennt sind?
Die Funktion fgets()
hilft nicht, da es am Ende der Leitung auf beide 0x0A
oder 0x0D
Bytes erkennt, sieht so fgets()
mehr als Zeilenseparatoren existiert.
Gibt es eine fgets()
Version, die nur das 0x0A
Byte als Zeilentrennzeichen für meinen Fall verwendet?
Gibt es einen anderen Ansatz, ohne meine eigene Lese-Puffer-Parsing-Linien-emittierende Lösung zu codieren?
P. S.file_get_contents()
nicht wie Dateien größer als 2 GB.
'$ temp = file_get_contents ('foo.txt'); $ lines = preg_split ('/ [\ x0a \ x0d] + /', $ temp); '? –
Sie können fgets() verwenden, für das letzte Zeichen testen und Linien zusammennähen, wenn es ein 0x0D –
ist, erkennt PHP normalerweise \ n oder \ r \ n als Linienendungen. Einfache Zeilenumbrüche werden nur als Zeilenenden erkannt, wenn auto_detect_line_endings auf "true" gesetzt ist (false ist der Standardwert). Was sagt Ihre Einstellung auto_detect_line_endings? – Jojo