zip_entry_open()
La fonction zip_entry_open() en PHP ouvre une entrée dans une archive zip pour en lire le contenu. Déprécié depuis PHP 7.4, supprimé en PHP 8.0.
⚠️ Avis de dépréciation : La fonction zip_entry_open() appartient à l'extension zip héritée, qui a été dépréciée dans PHP 7.4 et supprimée dans PHP 8.0. Les exemples ci-dessous sont fournis à titre de référence historique uniquement. Pour les applications PHP modernes, utilisez plutôt la classe ZipArchive.
zip_entry_open() prépare une entrée (fichier) individuelle à l'intérieur d'une archive zip ouverte afin que son contenu puisse être lu. Elle fonctionne en tandem avec zip_open(), zip_read() et zip_entry_read() : vous ouvrez l'archive, itérez vers une entrée, ouvrez cette entrée, puis lisez son contenu. Sans appeler zip_entry_open() au préalable, un appel à zip_entry_read() n'a rien à lire.
Cette page couvre la signature de la fonction, ses paramètres et sa valeur de retour, un exemple complet de lecture d'une entrée, et — surtout — le remplacement moderne par la classe ZipArchive à utiliser aujourd'hui.
Syntaxe
resource zip_entry_open(resource $zip, resource $zip_entry, string $mode = "r")Paramètres
| Paramètre | Description |
|---|---|
$zip | Le handle de l'archive retourné par zip_open(). |
$zip_entry | Un handle d'entrée retourné par zip_read(). |
$mode | Le mode d'accès. L'extension zip héritée ne prenait en charge que l'accès en lecture, donc ce paramètre est effectivement toujours "r". |
L'argument
$passworden quatrième position mentionné dans certaines anciennes références n'a jamais été fonctionnel dans l'extensionzipintégrée ; il est ignoré.
Valeur de retour
Retourne true en cas de succès ou false en cas d'échec. Malgré l'indication de type resource dans les anciens documents, vous n'obtenez pas de nouveau handle en retour — vous continuez à passer le même handle $zip_entry à zip_entry_read().
Exemple d'utilisation
Exemple : Lire un fichier depuis une archive zip
Ouvrez l'archive, parcourez les entrées, ouvrez une entrée, lisez son contenu et nettoyez :
$zip = zip_open("example.zip");
if (is_resource($zip)) {
while ($zip_entry = zip_read($zip)) {
// Prepare this entry for reading
if (zip_entry_open($zip, $zip_entry, "r")) {
$name = zip_entry_name($zip_entry);
$contents = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry));
echo "$name: $contents\n";
zip_entry_close($zip_entry);
}
}
zip_close($zip);
}Ici, zip_open() ouvre l'archive, zip_read() avance vers chaque entrée à tour de rôle, zip_entry_open() rend l'entrée courante lisible, et zip_entry_read() retourne ses octets. Associez toujours chaque ouverture réussie à zip_entry_close(), et fermez l'archive avec zip_close() lorsque vous avez terminé.
Alternative moderne : la classe ZipArchive
Pour obtenir le même résultat avec PHP 8.0+, utilisez la classe intégrée ZipArchive :
$zip = new ZipArchive;
if ($zip->open('example.zip') === true) {
// Loop over every entry by index
for ($i = 0; $i < $zip->numFiles; $i++) {
$name = $zip->getNameIndex($i);
$contents = $zip->getFromIndex($i);
echo "$name: $contents\n";
}
$zip->close();
}ZipArchive ne nécessite pas d'étape séparée pour « ouvrir l'entrée » : getFromIndex() (ou getFromName()) lit directement le contenu d'une entrée, et fonctionne avec toutes les versions modernes de PHP.
Conclusion
Dans cet article, nous avons présenté la fonction PHP zip_entry_open() et comment elle permet d'ouvrir un fichier dans une archive zip. Nous avons expliqué ce que fait la fonction, sa syntaxe, et fourni un exemple de son utilisation dans un scénario pratique. Notez que zip_entry_open() est dépréciée et supprimée dans PHP 8.0 ; pour les projets modernes, utilisez la classe ZipArchive pour ouvrir et lire des fichiers dans une archive zip.