Heim  >  Artikel  >  Backend-Entwicklung  >  Zwei Möglichkeiten, die PHP-Funktion fseek zum Lesen großer Dateien zu implementieren

Zwei Möglichkeiten, die PHP-Funktion fseek zum Lesen großer Dateien zu implementieren

墨辰丷
墨辰丷Original
2018-06-01 10:01:361607Durchsuche

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 $data

Zusammenfassung: 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


array_keys in php

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!

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