Lors du traitement des fichiers ZIP dans PHP, deux fonctions zip_entry_open () et zip_read () sont souvent utilisées. Ils font tous partie de l'extension ZIP de PHP, qui est principalement utilisée pour lire le contenu dans des packages compressés. Cependant, de nombreux développeurs ont des doutes sur l'ordre de l'appel lors de l'utilisation: quelle fonction dois-je appeler en premier? Cet article expliquera en détail l'ordre d'utilisation correcte et les précautions de ces deux fonctions.
zip_read ()
Utilisé pour lire l'entrée suivante dans le fichier zip, ce qui équivaut à traverser les fichiers dans le package compressé.
La valeur de retour est une poignée d'entrée zip du type de ressource , et si elle est lue jusqu'à la fin, il renvoie faux .
zip_entry_open ()
Utilisé pour ouvrir une entrée zip lue par zip_read () afin que son contenu soit accessible.
Ce n'est que lorsque zip_entry_open () est appelé que l'entrée actuelle est lue, comme l'utilisation de zip_entry_read () pour obtenir le contenu.
L'ordre correct pour faire fonctionner un fichier zip à l'aide de ces deux fonctions est:
$zip = zip_open('http://m66.net/path/to/yourfile.zip');
if (is_resource($zip)) {
while ($entry = zip_read($zip)) { // Appeler en premier zip_read() Obtenez la prochaine entrée
if (zip_entry_open($zip, $entry)) { // Utiliser à nouveau zip_entry_open() Ouvrez cette entrée
$content = '';
while ($data = zip_entry_read($entry, 1024)) {
$content .= $data; // Lisez le contenu d'entrée
}
echo "Entry name: " . zip_entry_name($entry) . "\n";
echo "Content length: " . strlen($content) . "\n";
zip_entry_close($entry); // Fermez l'entrée actuelle
}
}
zip_close($zip); // fermeture ZIP ressource
}
Pour résumer:
Premier appel zip_read () pour traverser chaque entrée de fichier dans le package zip;
Appelez zip_entry_open () sur chaque entrée pour ouvrir;
Lire le contenu d'entrée;
Fermer l'entrée;
Jusqu'à ce que toutes les entrées soient traversées.
zip_entry_open () est une fonction qui ouvre l'entrée zip actuelle pour la lecture du contenu, mais uniquement si vous devez d'abord obtenir une poignée de ressources d'entrée, qui est obtenue via zip_read () .
Si vous appelez ZIP_ENTRY_OPEN () en premier, car il n'y a pas de poignée d'entrée, la fonction échouera, ce qui entraînera l'ouverture de l'entrée.
Aucun jugement n'est fait pour savoir si la valeur de retour de zip_read () est fausse
Cela entraînera les erreurs ultérieures de zip_entry_open () . L'inspection de la structure cyclique doit être utilisée.
Entrée ou ressource zip non fermée <br> Cela peut conduire à la fuite des ressources et à la dégradation des performances du programme.
Lire Zip directement à l'aide de l'URL du fichier
Assurez-vous que la configuration PHP permet d'ouvrir les fichiers sous forme d'URL ( ALLOT_URL_FOPEN doit être activé).
zip_read () est utilisé pour obtenir la prochaine entrée de fichier dans le package compressé et est le point de départ de la traversée;
zip_entry_open () est utilisé pour ouvrir l'entrée renvoyée par zip_read () et se préparer à lire le contenu du fichier;
Lorsque vous l'utilisez, vous devez d'abord appeler zip_read () , puis appeler zip_entry_open () . Ce n'est que lorsque les deux sont utilisés ensemble que le contenu du fichier zip peut être lu correctement.
La maîtrise de l'ordre d'appel correct peut vous permettre de traiter les fichiers zip efficaces et stables, en évitant les erreurs courantes.