Dans le flux de traitement de fichiers de PHP, FOPEN () et Rewind () sont deux fonctions de base mais très critiques, en particulier dans les scénarios où les fichiers gros sont traités ou les fichiers doivent être lus à plusieurs reprises. De nombreux débutants rencontrent souvent des problèmes tels que "le contenu de lecture est vide" ou "la position du pointeur est incorrecte" lors de l'utilisation de ces deux fonctions. Cet article expliquera en détail comment réinitialiser correctement la position du pointeur de fichier à l'aide de Rewind () après avoir ouvert un fichier à l'aide de fopen () .
Rewind () est l'une des fonctions de fonctionnement du fichier fournies par PHP, qui est utilisée pour réinitialiser la position du pointeur de fichier spécifié au début du fichier. Il ne reçoit qu'un seul paramètre: la poignée du fichier (type de ressource) renvoyé par fopen () .
Son utilisation typique est la suivante:
$handle = fopen("https://gitbox.net/files/sample.txt", "r");
rewind($handle);
Ce code ouvrira le fichier distant pointé par la poignée $ et retirera immédiatement le pointeur vers le début. Bien que la plupart du temps le fichier soit ouvert dans sa propre position de départ, il est une bonne habitude d'utiliser Rewind () avant de le revoir.
De nombreuses personnes effectueront les opérations suivantes en séquence lors de la lecture de fichiers:
$handle = fopen("https://gitbox.net/files/sample.txt", "r");
$content1 = fread($handle, 100);
// Réinitialisez le pointeur avant de lire à nouveau
rewind($handle);
$content2 = fread($handle, 100);
Dans cet exemple, $ Content1 lit les 100 premiers octets. Si vous n'utilisez pas Rewind () , le deuxième Fread () continuera à lire à partir du 101e octet, ce qui n'est souvent pas le résultat que nous voulons. Après avoir ajouté Rewind () , $ Content2 obtiendra également les mêmes 100 premiers octets de contenu.
Bien que Rewind () soit simple à utiliser, certaines restrictions sont facilement négligées:
Restrictions en mode de fichier : Rewind () est uniquement valable pour les fichiers ouverts à l'aide de la lecture ("r") ou de la lecture ("r +"). Utilisez Rewind () en mode écriture (tel que "W"). Bien que le pointeur se déplace, le contenu du fichier peut également être tronqué et vous devez l'utiliser avec prudence.
Erreur de ressource non valide : assurez-vous que fopen () renvoie avec succès la ressource, sinon return () renvoie false et aucune erreur explicite ne sera lancée.
Fichier de type de flux : Si vous ouvrez un flux distant (comme https: //gitbox.net / ... ), certains serveurs peuvent ne pas prendre en charge la réinitialisation du pointeur. Il est recommandé d'utiliser Rewind () après le cache local.
L'exemple suivant montre comment réinitialiser le pointeur après une lecture, à nouveau pour implémenter des statistiques:
$handle = fopen("https://gitbox.net/files/data.txt", "r");
if ($handle) {
$content = fread($handle, filesize("data.txt"));
// Statistiques pour la première fois
$count1 = substr_count($content, "PHP");
// Réinitialisez le pointeur et relisez-le
rewind($handle);
$contentAgain = fread($handle, filesize("data.txt"));
$count2 = substr_count($contentAgain, "PHP");
echo "Premières statistiques:{$count1} De premier ordre,Statistiques après réinitialisation:{$count2} De premier ordre";
fclose($handle);
} else {
echo "L'ouverture des fichiers a échoué";
}
Pendant le traitement des fichiers PHP, Rewind () est une fonction apparemment simple mais très utile. Il vous permet de réinitialiser l'emplacement du pointeur de fichier sans fermer et réouverture le fichier, enregistrer les ressources et améliorer l'efficacité du code. Que ce soit dans l'analyse des données, le traitement du journal ou les tâches de lecture en plusieurs étapes, l'utilisation rationnelle de Rewind () peut rendre le code plus flexible et robuste.
Gardez à l'esprit certains points clés: assurez-vous que la poignée du fichier est efficace, utilisez le mode d'ouverture approprié et comprenez la source du fichier (local ou distant). En les maîtrisant, vous pouvez utiliser Rewind () facilement.
Étiquettes associées:
fopen