Maison > Article > développement back-end > Deux façons d'implémenter la fonction php fseek pour lire des fichiers volumineux
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));
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
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 :
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!