Maison  >  Article  >  développement back-end  >  Exemples détaillés de deux méthodes de lecture de fichiers volumineux à l'aide de la fonction php fseek

Exemples détaillés de deux méthodes de lecture de fichiers volumineux à l'aide de la fonction php fseek

怪我咯
怪我咯original
2017-07-09 10:21:371347parcourir

Lecture de fichiers en php est très simple, mais si le fichier lu est très volumineux, comment le résoudre ? Nous pouvons utiliser directement fseek pour gérer des fichiers volumineux. Cet article présente PHP pour utiliser la fonction fseek pour lire des fichiers volumineux. Les amis dans le besoin peuvent se référer à

php pour lire des fichiers volumineux à l'aide de la fonction fseek. est la méthode la plus courante. Elle n'a pas besoin de lire tout le contenu du fichier en mémoire, mais fonctionne directement via des pointeurs, donc l'efficacité est assez efficace. Il existe également de nombreuses méthodes différentes lors de l'utilisation de fseek pour faire fonctionner des fichiers. L'efficacité peut être légèrement différente. Voici deux méthodes couramment utilisées

Méthode 1 :

Trouvez d'abord le dernier EOF du fichier via fseek. position de la dernière ligne, prenez les données de cette ligne, puis trouvez la position de départ de la ligne suivante, puis prenez la position de cette ligne, et ainsi de suite, jusqu'à ce que la ligne $num soit trouvée. Le code d'implémentation est le suivant :

L'exécution entière du code prend 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));

Méthode 2 :

Toujours utiliser la méthode fseek from Le fichier commence enfin à être lu, mais cette fois il n'est pas lu petit à petit, mais lu morceau par morceau. Chaque fois qu'une donnée est lue, les données lues sont placées dans un buf, puis le caractère de nouvelle ligne (. n) est transmis. nombre pour déterminer si les dernières lignes de données $num ont été lues. Le code d'implémentation est le suivant

L'exécution entière du code prend 0,0009(s).

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn