Introduction
Cette extension permet de lire et d'écrire des archives compressées ZIP ainsi que les fichiers s'y trouvant.
Pré-requis
La version inclue dans PHP 4 nécessite la bibliothèque » ZZIPlib
, par Guido Draheim, version 0.10.6 ou supérieure.
Cette extension utilise les fonctions de la bibliothèque » zlib
par Jean-loup Gailly et Mark Adler.
Installation
Note:
Le support de Zip avant PHP 4.1.0 est expérimental.
AVERTISSEMENT
Parce que l'extension Zip en PHP 4 n'est plus maintenue, nous vous recommandons d'utiliser plutôt l'extension PECL.
Afin d'utiliser ces fonctions, vous devez compiler PHP avec le support Zip en utilisant l'option de configuration --with-zip[=DIR]
, où [DIR] est le préfixe de l'installation de la bibliothèque » ZZIPlib
.
Les utilisateurs de Windows doivent activer la bibliothèque php_zip.dll
dans le php.ini
afin d'utiliser ces fonctions.
Afin d'utiliser ces fonctions, vous devez compiler PHP avec le support Zip en utilisant l'option de configuration --enable-zip
.
Les utilisateurs de Windows doivent activer la bibliothèque php_zip.dll
dans le php.ini
afin d'utiliser ces fonctions.
Des informations sur l'installation de ces extensions PECL peuvent être trouvées dans le chapitre du manuel intitulé Installation des extensions PECL
. D'autres informations comme les notes sur les nouvelles versions, les téléchargements, les sources des fichiers, les informations concernant les mainteneurs ainsi qu'un CHANGELOG, peuvent être trouvées ici : » http://pecl.php.net/package/zip
.
La bibliothèque DLL
pour cette extension PECL
peut être téléchargée depuis, soit la page de » téléchargement PHP
, soit depuis » http://pecl4win.php.net/
En PHP 4, cette bibliothèque DLL
se trouve dans le dossier extensions/
avec les binaires PHP pour Windows téléchargées.
Configuration à l'exécution
Cette extension ne définit aucune directive de configuration.
Types de ressources
Il y a deux types de ressources utilisées dans le module ZIP. La première représente le dossier ZIP pour l'archive ZIP, la seconde, l'entrée ZIP pour les entrées de l'archive.
Constantes pré-définies
Ces constantes sont définies par cette extension, et ne sont disponibles que si cette extension a été compilée avec PHP, ou bien chargée au moment de l'exécution.
ZipArchive utilise des constantes de classe. Il y a trois types de constantes, les options (FL_), les erreurs (ER_) ou les modes (no prefix).
- ZIPARCHIVE::CREATE
(entier
)
- Crée l'archive si elle n'existe pas.
- ZIPARCHIVE::OVERWRITE
(entier
)
- Démarre toujours une nouvelle archive. Ce mode écrase le fichier s'il existe déjà.
- ZIPARCHIVE::EXCL
(entier
)
- Erreur si l'archive existe déjà.
- ZIPARCHIVE::CHECKCONS
(entier
)
- Effectue des analyses supplémentaires de cohérence et émet une erreur si elles échouent.
- ZIPARCHIVE::FL_NOCASE
(entier
)
- Ignore la casse sur le nom
- ZIPARCHIVE::FL_NODIR
(entier
)
- Ignore le composant dossier
- ZIPARCHIVE::FL_COMPRESSED
(entier
)
- Lit les données compressées
- ZIPARCHIVE::FL_UNCHANGED
(entier
)
- Utilise les données originales, ignore les modifications
- ZIPARCHIVE::CM_DEFAULT
(entier
)
- meilleur compression ou stocke
- ZIPARCHIVE::CM_STORE
(entier
)
- stocké (non-compressé)
- ZIPARCHIVE::CM_SHRINK
(entier
)
- retrait
- ZIPARCHIVE::CM_REDUCE_1
(entier
)
- réduit de facteur 1
- ZIPARCHIVE::CM_REDUCE_2
(entier
)
- réduit de facteur 2
- ZIPARCHIVE::CM_REDUCE_3
(entier
)
- réduit de facteur 3
- ZIPARCHIVE::CM_REDUCE_4
(entier
)
- réduit de facteur 4
- ZIPARCHIVE::CM_IMPLODE
(entier
)
- réunit
- ZIPARCHIVE::CM_DEFLATE
(entier
)
- compression
- ZIPARCHIVE::CM_DEFLATE64
(entier
)
- compression 64
- ZIPARCHIVE::CM_PKWARE_IMPLODE
(entier
)
- réunit PKWARE
- ZIPARCHIVE::CM_BZIP2
(entier
)
- algorithme BZIP2
- ZIPARCHIVE::ER_OK
(entier
)
- Aucune erreur
- ZIPARCHIVE::ER_MULTIDISK
(entier
)
- archives ZIP multi-disques non supportées
- ZIPARCHIVE::ER_RENAME
(entier
)
- échec du changement de nom du fichier temporaire
- ZIPARCHIVE::ER_CLOSE
(entier
)
- échec de la fermeture de l'archive ZIP
- ZIPARCHIVE::ER_SEEK
(entier
)
- erreur de pointeur
- ZIPARCHIVE::ER_READ
(entier
)
- erreur de lecture
- ZIPARCHIVE::ER_WRITE
(entier
)
- erreur d'écriture
- ZIPARCHIVE::ER_CRC
(entier
)
- erreur CRC
- ZIPARCHIVE::ER_ZIPCLOSED
(entier
)
- archive ZIP fermée
- ZIPARCHIVE::ER_NOENT
(entier
)
- le fichier n'existe pas
- ZIPARCHIVE::ER_EXISTS
(entier
)
- le fichier existe déjà
- ZIPARCHIVE::ER_OPEN
(entier
)
- impossible d'ouvrir le fichier
- ZIPARCHIVE::ER_TMPOPEN
(entier
)
- échec lors de la création du fichier temporaire
- ZIPARCHIVE::ER_ZLIB
(entier
)
- erreur Zlib
- ZIPARCHIVE::ER_MEMORY
(entier
)
- échec d'allocation mémoire
- ZIPARCHIVE::ER_CHANGED
(chaîne de caractères
)
- l'entrée a été modifiée
- ZIPARCHIVE::ER_COMPNOTSUPP
(entier
)
- méthode de compression non supportée
- ZIPARCHIVE::ER_EOF
(entier
)
- EOF prématuré
- ZIPARCHIVE::ER_INVAL
(entier
)
- argument invalide
- ZIPARCHIVE::ER_NOZIP
(entier
)
- ce n'est pas une archive ZIP
- ZIPARCHIVE::ER_INTERNAL
(entier
)
- erreur interne
- ZIPARCHIVE::ER_INCONS
(entier
)
- archive ZIP incohérente
- ZIPARCHIVE::ER_REMOVE
(entier
)
- impossible d'effacer le fichier
- ZIPARCHIVE::ER_DELETED
(entier
)
- l'entrée a été supprimée
Exemples
Exemple 2869. Création d'une archive ZIP
<?php
$zip
= new
ZipArchive
();
$filename
=
"./test112.zip"
;
if (
$zip
->
open
(
$filename
,
ZIPARCHIVE
::
CREATE
)!==
TRUE
) {
exit(
"cannot open <$filename>\n"
);
}
$zip
->
addFromString
(
"testfilephp.txt"
.
time
(),
"#1 Ceci est un test, ajouté en tant que fichier testfilephp.txt.\n"
);
$zip
->
addFromString
(
"testfilephp2.txt"
.
time
(),
"#2 Ceci est un test, ajouté en tant que fichier testfilephp2.txt.\n"
);
$zip
->
addFile
(
$thisdir
.
"/too.php"
,
"/testfromfile.php"
);
echo
"numfiles: "
.
$zip
->
numFiles
.
"\n"
;
echo
"status:"
.
$zip
->
status
.
"\n"
;
$zip
->
close
();
?>
Exemple 2870. Affiche les détails de l'archive et liste son contenu
<?php
$za
= new
ZipArchive
();
$za
->
open
(
'test_with_comment.zip'
);
print_r
(
$za
);
var_dump
(
$za
);
echo
"numFiles: "
.
$za
->
numFiles
.
"\n"
;
echo
"status: "
.
$za
->
status
.
"\n"
;
echo
"statusSys: "
.
$za
->
statusSys
.
"\n"
;
echo
"filename: "
.
$za
->
filename
.
"\n"
;
echo
"comment: "
.
$za
->
comment
.
"\n"
;
for (
$i
=
0
;
$i
<
$za
->
numFiles
;
$i
++) {
echo
"index: $i\n"
;
print_r
(
$za
->
statIndex
(
$i
));
}
echo
"Fichier numéro : "
.
$za
->
numFiles
.
"\n"
;
?>
Exemple 2871. Gestionnaire de flux ZIP, lit les méta-informations d'OpenOffice
<?php
$reader
= new
XMLReader
();
$reader
->
open
(
'zip://'
.
dirname
(
__FILE__
) .
'/test.odt#meta.xml'
);
$odt_meta
= array();
while (
$reader
->
read
()) {
if (
$reader
->
nodeType
==
XMLREADER
::
ELEMENT
) {
$elm
=
$reader
->
name
;
} else {
if (
$reader
->
nodeType
==
XMLREADER
::
END_ELEMENT
&&
$reader
->
name
==
'office:meta'
) {
break;
}
if (!
trim
(
$reader
->
value
)) {
continue;
}
$odt_meta
[
$elm
] =
$reader
->
value
;
}
}
print_r
(
$odt_meta
);
?>
Cet exemple utilise l'ancienne API (PHP 4), il ouvre une archive ZIP, lit chaque fichier de l'archive et affiche leurs contenus. L'archive test2.zip
utilisé dans cet exemple est une des archives de test des sources de ZZIPlib.
Exemple 2872. Exemple d'utilisation Zip
<?php
$zip
=
zip_open
(
"/tmp/test2.zip"
);
if (
$zip
) {
while (
$zip_entry
=
zip_read
(
$zip
)) {
echo
"Nom : "
.
zip_entry_name
(
$zip_entry
) .
"\n"
;
echo
"Taille du fichier : "
.
zip_entry_filesize
(
$zip_entry
) .
"\n"
;
echo
"Taille compressée : "
.
zip_entry_compressedsize
(
$zip_entry
) .
"\n"
;
echo
"Méthode de compression : "
.
zip_entry_compressionmethod
(
$zip_entry
) .
"\n"
;
if (
zip_entry_open
(
$zip
,
$zip_entry
,
"r"
)) {
echo
"Contenu du fichier :\n"
;
$buf
=
zip_entry_read
(
$zip_entry
,
zip_entry_filesize
(
$zip_entry
));
echo
"$buf\n"
;
zip_entry_close
(
$zip_entry
);
}
echo
"\n"
;
}
zip_close
(
$zip
);
}
?>
Table des matières
- zip_close
— Ferme une archive Zip
- zip_entry_close
— Ferme un dossier d'archive
- zip_entry_compressedsize
— Lit la taille compressée d'un dossier d'archives
- zip_entry_compressionmethod
— Lit la méthode de compression utilisée sur un dossier d'archives
- zip_entry_filesize
— Lit la taille décompressée d'un dossier d'archives
- zip_entry_name
— Lit le nom d'un dossier d'archives
- zip_entry_open
— Ouvre un dossier d'archives en lecture
- zip_entry_read
— Lit le contenu d'un fichier dans un dossier
- zip_open
— Ouvre une archive ZIP
- zip_read
— Lit la prochaine entrée dans une archive ZIP
- ZipArchive::addEmptyDir
— Ajoute un nouveau dossier
- ZipArchive::addFile
— Ajoute un fichier à l'archive ZIP depuis le chemin fourni
- ZipArchive::addFromString
— Ajoute un fichier à une archive ZIP en utilisant son contenu
- ZipArchive::close
— Ferme l'archive active (ouverte ou nouvellement créée)
- ZipArchive::deleteIndex
— Efface une entrée de l'archive en utilisant son index
- ZipArchive::deleteName
— Efface une entrée dans l'archive en utilisant son nom
- ZipArchive::extractTo
— Extrait le contenu de l'archive
- ZipArchive::getArchiveComment
— Retourne le commentaire de l'archive ZIP
- ZipArchive::getCommentIndex
— Retourne le commentaire d'une entrée
- ZipArchive::getCommentName
— Retourne le commentaire d'une entrée en utilisant le nom de l'entrée
- ZipArchive::getFromIndex
— Retourne le contenu d'une entrée en utilisant son index
- ZipArchive::getFromName
— Retourne le contenu de l'entrée en utilisant son nom
- ZipArchive::getNameIndex
— Retourne le nom d'une entrée en utilisant son index
- ZipArchive::getStream
— Récupère un gestionnaire de fichier pour l'entrée définie par son nom (lecture seule)
- ZipArchive::locateName
— Retourne l'index d'une entrée de l'archive
- ZipArchive::open
— Ouvre une archive ZIP
- ZipArchive::renameIndex
— Renomme une entrée définie par son index
- ZipArchive::renameName
— Renomme une entrée définie par son nom
- ZipArchive::setArchiveComment
— Définit le commentaire d'une archive ZIP
- ZipArchive::setCommentIndex
— Définit le commentaire d'une entrée définie par son index
- ZipArchive::setCommentName
— Définit le commentaire d'une entrée spécifiée par son nom
- ZipArchive::statIndex
— Récupère les détails d'une entrée définie par son index
- ZipArchive::statName
— Récupère les détails de l'entrée définie par son nom
- ZipArchive::unchangeAll
— Annule toutes les modifications faites sur l'archive
- ZipArchive::unchangeArchive
— Annule toutes les modifications globales faites sur l'archive
- ZipArchive::unchangeIndex
— Annule toutes les modifications faites sur une entrée, définie par nom index
- ZipArchive::unchangeName
— Annule toutes les modifications faites sur une entrée, définie par son nom