Lorsque vous travaillez avec des fichiers ZIP dans PHP, il est souvent nécessaire de traverser toutes les entrées du package compressé. PHP fournit la fonction zip_read () avec zip_entry_read () pour lire le contenu des fichiers zip, mais en fonctionnement réel, comment déterminer si la dernière entrée a été lue est un problème courant.
Cet article expliquera en détail comment utiliser l'extension ZIP de PHP et la fonction zip_read () pour déterminer si toutes les entrées du package compressé ont été lues.
Tout d'abord, nous devons ouvrir un fichier zip avec zip_open () , renvoyer une poignée de ressource, puis obtenir chaque objet d'entrée via zip_read () . L'exemple est le suivant:
$zip = zip_open("http://m66.net/path/to/yourfile.zip");
if (is_resource($zip)) {
while ($entry = zip_read($zip)) {
echo "Lire les entrées: " . zip_entry_name($entry) . "\n";
// Lire les entréescontenu
if (zip_entry_open($zip, $entry)) {
$content = zip_entry_read($entry, zip_entry_filesize($entry));
echo $content;
zip_entry_close($entry);
}
}
zip_close($zip);
} else {
echo "Ouvrir ZIP Échec du fichier";
}
Dans le code ci-dessus, nous obtenons chaque entrée en séquence par while ($ entry = zip_read ($ zip)) , et la fin de la boucle signifie que toutes les entrées ont été lues.
zip_read () renvoie la ressource d'entrée suivante. Si false est retourné, cela signifie qu'il n'y a plus d'entrées. En fait, déterminer directement si la valeur de retour de zip_read () est fausse consiste à déterminer si toutes les entrées ont été lues.
Exemple:
$zip = zip_open("http://m66.net/path/to/yourfile.zip");
if (is_resource($zip)) {
while (($entry = zip_read($zip)) !== false) {
echo "Entrée actuelle: " . zip_entry_name($entry) . "\n";
// Traiter le contenu de l'entrée
}
echo "Toutes les entrées ont été lues。\n";
zip_close($zip);
}
Dans ce code, lorsque zip_read () renvoie false , le programme peut considérer que toutes les entrées ont été traversées.
Voici une démonstration qui lit toutes les entrées d'un fichier zip et publie le nom et le contenu:
<?php
$zipFile = "http://m66.net/files/example.zip";
$zip = zip_open($zipFile);
if (!is_resource($zip)) {
die("无法Ouvrir ZIP document:$zipFile\n");
}
while (($entry = zip_read($zip)) !== false) {
$entryName = zip_entry_name($entry);
echo "Nom d'entrée: $entryName\n";
if (zip_entry_open($zip, $entry)) {
$entrySize = zip_entry_filesize($entry);
$content = zip_entry_read($entry, $entrySize);
echo "contenu:\n$content\n";
zip_entry_close($entry);
} else {
echo "无法Ouvrir条目: $entryName\n";
}
}
echo "Toutes les entrées ont été lues。\n";
zip_close($zip);
?>
zip_read () renvoie la prochaine ressource d'entrée zip à chaque fois qu'elle est appelée et renvoie false après avoir lu toutes les entrées.
Pour déterminer si la dernière entrée a été lue, vérifiez simplement si la valeur de retour de zip_read () est fausse .
La combinaison de zip_entry_open () et de zip_entry_read () peut lire le contenu d'entrée.
Grâce aux méthodes ci-dessus, vous pouvez traverser efficacement et avec précision toutes les entrées du fichier zip et juger de la progression de la lecture.