2017-12-30 27 views
0

Ich möchte eine Datei bis X Bytes lesen. Aber die letzte Zeile sollte nicht wie in meinem aktuellen Code abgeschnitten werden:fread: lesen bis "Ende der Zeile" (nicht schneiden Sie die Zeilen)

$file = fopen("test.txt", "r"); 
while(! feof($file)) { 
    $contents = fread($file,10000); 

Gerade jetzt, fread liest bis 10000 Bytes erreicht werden. Dann schneidet die Linie ab und erstellt eine neue Datei. Die Zeile ist grundsätzlich komplett gespeichert, ist aber in zwei Dateien aufgeteilt. Ich möchte nicht nur anhalten und das Ende einer Zeile.

Irgendwelche Lösungen? Vielen Dank!

+0

Was möchten Sie erreichen? Anstelle von fread verwenden Sie [fgets] (http://php.net/manual/en/function.fgets.php) oder [stream_get_line] (http://php.net/manual/en/function.stream-get-line .php), und zähle die Zeilenlänge mit strlen. Sie könnten sogar [file] (http://php.net/manual/en/function.file.php) und dann einen Loop-Count-Zeichensatz usw. verwenden. –

+0

Ich möchte eine große Datei in kleinere aufteilen. Wenn ich es zeilenweise mache, dauert es Tage (~ 50 kb/sec). Deshalb brauche ich etwas wie fread, also muss ich nicht jede einzelne Zeile einzeln lesen und speichern. –

+0

Das ist nicht wie es funktioniert, es dauert nicht Tage mehr wie 1 Sekunde, Sie speichern nicht jede Zeile in einer neuen Datei Sie verketten die Zeilen und zählen dann erstellen Sie Ihre neue Datei mit char 10k, im Grunde, was ich oben sagte. Was du tust, kann nicht mit fread gemacht werden. –

Antwort

0

Ich glaube, ich habe es:

$file = fopen("test.txt", "r"); 
while(! feof($file)) { 
    $contents = fread($file,$eachFileSize); 
    $contents = $contents . fgets($file); 

Kann jemand bestätigen dies nicht die beabsichtigte Art und Weise (z LawrenceCherone vorgeschlagen)?

Verwandte Themen