Heim > Artikel > Backend-Entwicklung > Zwei Möglichkeiten, große Dateien mit der PHP-Funktion fseek zu lesen
Die häufigste Methode zum Lesen großer Dateien ist die Verwendung der fseek-Funktion. Sie muss nicht den gesamten Inhalt der Datei in den Speicher einlesen, sondern arbeitet direkt über Zeiger, sodass die Effizienz bei der Verwendung recht hoch ist fseek to Beim Bearbeiten von Dateien gibt es viele verschiedene Methoden, und die Effizienz kann leicht unterschiedlich sein. Die folgenden sind zwei häufig verwendete Methoden:
Suchen Sie zuerst das letzte Ende der Datei durch fseek Ein EOF, dann die Startposition der letzten Zeile finden, die Daten dieser Zeile übernehmen, dann die Startposition der nächsten Zeile finden, dann die Position dieser Zeile übernehmen und so weiter, bis die $num-Zeile ist gefunden. Der Implementierungscode lautet wie folgt:
Die gesamte Codeausführung dauert 0,0095 (s)
Methode 2: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));
Verwenden Sie weiterhin fseek, um vom Ende des Codes an zu lesen Datei, aber Zu diesem Zeitpunkt wird nicht Stück für Stück gelesen, sondern jedes Mal, wenn ein Datenelement gelesen wird, werden die gelesenen Daten in einen Puffer gestellt und dann die Anzahl der Zeilenumbruchzeichen (n). Wird verwendet, um festzustellen, ob dies der Fall war. Nach dem Lesen der letzten $num-Datenzeilen lautet der Implementierungscode wie folgt
Die gesamte Codeausführung dauert 0,0009(s).
Vielen Dank Zum Lesen, ich hoffe, es kann allen helfen. Vielen Dank für Ihre Rezension dieses Artikels. Site-Unterstützung!$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 $data
Weitere verwandte Artikel zu den beiden Methoden zum Lesen großer Dateien mithilfe der PHP-Funktion fseek finden Sie auf der chinesischen PHP-Website!