Forum und email

Fonctions ZIP

Introduction

Cette extension permet de lire et d'écrire des archives compressées ZIP ainsi que les fichiers s'y trouvant.

Pré-requis

PHP 4

La version inclue dans PHP 4 nécessite la bibliothèque » ZZIPlib, par Guido Draheim, version 0.10.6 ou supérieure.

PHP 5.2.0 ou supérieur

Cette extension utilise les fonctions de la bibliothèque » zlib par Jean-loup Gailly et Mark Adler.

Installation

PHP 4

Note: Le support de Zip avant PHP 4.1.0 est expérimental.

Warning

Parce que l'extension Zip en PHP 4 n'est plus maintenue, nous vous recommandons d'utiliser plutôt l'extension PECL.

Systèmes Linux

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.

Windows

Les utilisateurs de Windows doivent activer la bibliothèque php_zip.dll dans le php.ini afin d'utiliser ces fonctions.

PHP 5.2.0 et supérieur

Systèmes Linux

Afin d'utiliser ces fonctions, vous devez compiler PHP avec le support Zip en utilisant l'option de configuration --enable-zip.

Windows

Les utilisateurs de Windows doivent activer la bibliothèque php_zip.dll dans le php.ini afin d'utiliser ces fonctions.

Installation via PECL

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 : » https://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 » https://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

Example#1 Création d'une archive ZIP

<?php

$zip 
= new ZipArchive();
$filename "./test112.zip";

if (
$zip->open($filenameZIPARCHIVE::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();
?>

Example#2 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";
?>

Example#3 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.

Example#4 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_entryzip_entry_filesize($zip_entry));
            echo 
"$buf\n";

            
zip_entry_close($zip_entry);
        }
        echo 
"\n";

    }

    
zip_close($zip);
}
?>

Table of Contents