Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Beispiele für zwei Methoden zum Lesen großer Dateien mit der PHP-Funktion fseek

Detaillierte Beispiele für zwei Methoden zum Lesen großer Dateien mit der PHP-Funktion fseek

怪我咯
怪我咯Original
2017-07-09 10:21:371291Durchsuche

Dateien lesen 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 Dateioperationen durchzuführen. In diesem Artikel wird die Verwendung der fseek-Funktion zum Lesen großer Dateien vorgestellt Die fseek-Funktion ist die gebräuchlichste Methode. Sie muss nicht den gesamten Inhalt der Datei in den Speicher einlesen, sondern arbeitet direkt über Zeiger, sodass die Effizienz bei der Verwendung von fseek zum Bearbeiten von Dateien sehr hoch ist. Die Methoden und die Effizienz können leicht unterschiedlich sein.

Methode 1:

Suchen Sie zuerst den letzten EOF der Datei Finden Sie die Startposition der letzten Zeile, übernehmen Sie die Daten dieser Zeile, suchen Sie dann die Startposition der nächsten Zeile, übernehmen Sie dann die Position dieser Zeile und so weiter, bis die $num-Zeile gefunden wird. 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 die fseek-Methode Von Die Datei wird schließlich gelesen, aber dieses Mal wird sie nicht Stück für Stück, sondern Stück für Stück gelesen. Jedes Mal, wenn ein Datenelement gelesen wird, werden die gelesenen Daten in einen Puffer gestellt und dann das Zeilenumbruchzeichen (). n) wird übergeben, um festzustellen, ob die letzten $num Datenzeilen gelesen wurden. Der Implementierungscode lautet wie folgt:

Die gesamte Codeausführung dauert 0,0009(s).

Das obige ist der detaillierte Inhalt vonDetaillierte Beispiele für zwei Methoden zum Lesen großer Dateien mit der PHP-Funktion fseek. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn