Frage

Die nächstgelegene ich in der PHP-Dokumentation gesehen habe, ist zu fread () eine bestimmte Länge, aber das tut angeben, welche Linie aus zu starten. Alle anderen Vorschläge?

War es hilfreich?

Lösung

Sie gehen zu können, nicht ausgehend von der Linie X lesen, weil Linien beliebiger Länge sein können. So werden Sie haben von Anfang an lesen Zählen die Anzahl der Zeilen auf Linie X erhalten liest Zum Beispiel:

<?php
$f = fopen('sample.txt', 'r');
$lineNo = 0;
$startLine = 3;
$endLine = 6;
while ($line = fgets($f)) {
    $lineNo++;
    if ($lineNo >= $startLine) {
        echo $line;
    }
    if ($lineNo == $endLine) {
        break;
    }
}
fclose($f);

Andere Tipps

Ja, können Sie das tun einfach mit SplFileObject::seek

$file = new SplFileObject('filename.txt');
$file->seek(1000);
for($i = 0; !$file->eof() && $i < 1000; $i++) {
    echo $file->current(); 
    $file->next();
}

Dies ist eine Methode aus dem SeekableIterator Schnittstelle und nicht zu sein verwechseln mit fseek.

Und weil SplFileObject iterable ist, können Sie es sogar einfacher, mit einem tun LimitIterator :

$file = new SplFileObject('longFile.txt');
$fileIterator = new LimitIterator($file, 1000, 2000);
foreach($fileIterator as $line) {
    echo $line, PHP_EOL;
}

Auch dies ist nullbasiert, es ist also Linie 1001-2001.

Leider, um der Lage sein, von der Linie x zu lesen y auszukleiden, würden Sie in der Lage sein müssen Linie erkennen, bricht ... und Sie würden durch die gesamte Datei zu scannen haben. Aber vorausgesetzt, Sie sind nicht über diese aus Performance-Gründen zu fragen, können Sie sich Linien x mit dem folgenden y:

$x = 10; //inclusive start line
$y = 20; //inclusive end line
$lines = file('myfile.txt');
$my_important_lines = array_slice($lines, $x, $y);

Siehe auch: array_slice

Ich habe Angst, dass ... Ich denke, es Plan B ist dann: S

Für jede AJAX Anfrage werde ich:

  1. Lesen Sie in eine Zeichenfolge die Anzahl der Zeilen, die ich an den Client zurück werde.
  2. Kopieren Sie die Rest der Datei in eine temporäre Datei.
  3. Return-String an den Client.

Es ist lahm, und es wird wahrscheinlich ziemlich langsam mit 10.000+ Linien Dateien sein, aber ich denke, es ist besser als das gleiche immer und immer wieder zu lesen, zumindest die temporäre Datei wird bei jeder Anfrage kürzer wird ... Nein?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top