Deux façons d'implémenter la fonction php fseek pour lire des fichiers volumineux

墨辰丷
Libérer: 2023-03-28 20:54:02
original
1589 Les gens l'ont consulté

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

PHP lit les fichiers volumineux. L'utilisation de la fonction fseek est la plus courante. . méthode, il n'est pas nécessaire de lire tout le contenu du fichier dans la mémoire, mais fonctionne directement via des pointeurs, donc l'efficacité est assez efficace. Lorsque vous utilisez fseek pour faire fonctionner des fichiers, il existe de nombreuses méthodes différentes, et l'efficacité peut être. légèrement Il y a des différences. Voici deux méthodes couramment utilisées

Méthode 1 :

Trouvez d'abord le dernier EOF du fichier via fseek, puis trouvez le début. de la dernière ligne. La position de départ, récupérez 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 complète 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 :

Utilisez toujours fseek pour lire à partir de la fin du fichier, mais cette fois, il ne s'agit pas de lire petit à petit, mais de lire morceau par morceau. Chaque fois qu'une donnée est lue, les données lues sont lues. placé dans un buf, puis utilisez le nombre de caractères de nouvelle ligne (n) pour déterminer si les dernières $num lignes de données ont été lues. Le code d'implémentation est le suivant

L'exécution entière du code prend 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
Copier après la connexion

Résumé : Ce qui précède est l'intégralité du contenu de cet article, j'espère qu'il sera utile à l'étude de chacun.

Recommandations associées :

PHP utilise la fonction preg_split pour diviser les chaînes contenant des sauts de ligne et des points-virgules

Le programme PHP est implémenté comme suit La fonction

array_keys en php renvoie le nom de clé du tableau

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:
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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!