Heim > Artikel > Backend-Entwicklung > Zwei Möglichkeiten, die PHP-Funktion fseek zum Lesen großer Dateien zu implementieren
Das Lesen von Dateien in PHP ist sehr einfach, aber wenn die gelesene Datei sehr groß ist, wie kann man das Problem lösen? Wir können fseek direkt verwenden, um große Dateien zu lesen. Freunde, die sie benötigen, können sich auf
beziehen. PHP liest große Dateien am häufigsten .-Methode, es muss nicht der gesamte Inhalt der Datei in den Speicher eingelesen werden, sondern wird direkt über Zeiger ausgeführt, sodass die Effizienz bei der Verwendung von fseek zum Betreiben von Dateien sehr hoch ist Es gibt geringfügige Unterschiede. Im Folgenden finden Sie zwei häufig verwendete Methoden:
Suchen Sie zuerst den letzten EOF der Datei und dann den Anfang Rufen Sie die Startposition der letzten Zeile ab, ermitteln Sie die Startposition der nächsten Zeile, übernehmen Sie dann die Position dieser Zeile und so weiter, bis die Zeile $num gefunden wird. Der Implementierungscode lautet wie folgt:
Die gesamte Codeausführung dauert 0,0095 (s)function tail($fp,$n,$base=5) { assert($n>0); $pos = $n+1; $lines = array(); while(count($lines)< =$n){ try{ fseek($fp,-$pos,SEEK_END); } catch (Exception $e){ fseek(0); break; } $pos *= $base; while(!feof($fp)){ array_unshift($lines,fgets($fp)); } } return array_slice($lines,0,$n); } var_dump(tail(fopen("access.log","r+"),10));
Methode 2:
Verwenden Sie immer noch fseek, um vom Ende der Datei zu lesen, aber dieses Mal wird sie nicht einzeln, sondern einzeln gelesen. Jedes Mal, wenn ein Datenelement gelesen wird, werden die gelesenen Daten in a abgelegt buf und verwenden Sie dann die Anzahl der Zeilenumbrüche (n), um zu bestimmen, ob die letzten $num Datenzeilen gelesen wurden. Der Implementierungscode lautet wie folgt:
Die gesamte Codeausführung dauert 0,0009(s).$fp = fopen($file, "r"); $line = 10; $pos = -2; $t = " "; $data = ""; while ($line > 0) { while ($t != "n") { fseek($fp, $pos, SEEK_END); $t = fgetc($fp); $pos --; } $t = " "; $data .= fgets($fp); $line --; } fclose ($fp); echo $dataZusammenfassung: Das Obige ist der gesamte Inhalt dieses Artikels, ich hoffe, dass er für das Studium aller hilfreich sein wird. Verwandte Empfehlungen:
PHP verwendet die Funktion preg_split, um Zeichenfolgen mit Zeilenumbrüchen und Semikolons zu teilen
Das PHP-Programm ist implementiert wie folgt: Funktion
gibt den Schlüsselnamen des Arrays
Das obige ist der detaillierte Inhalt vonZwei Möglichkeiten, die PHP-Funktion fseek zum Lesen großer Dateien zu implementieren. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!