Heim  >  Artikel  >  Backend-Entwicklung  >  Zwei Möglichkeiten, große Dateien mit der PHP-Funktion fseek zu lesen

Zwei Möglichkeiten, große Dateien mit der PHP-Funktion fseek zu lesen

高洛峰
高洛峰Original
2016-12-20 15:28:161662Durchsuche

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!

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