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

怪我咯
Libérer: 2023-03-13 09:28:01
original
1361 Les gens l'ont consulté

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));
Copier après la connexion

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!

Étiquettes associées:
php
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal