Manuel PHP
Précédent |  | Suivant

# CLXXIX. Fonctions ZIP

# Introduction

Ce module vous permet de lire et d'écrire des archives compressées ZIP ainsi que les fichiers contenus dans ces archives.

# Pré-requis

## Interne à PHP 4

La version initiale est fournie avec PHP 4 et est disponible dans PECL depuis la version 1.0, voir http://pecl.php.net/package/zip. Elle ne peut que lire les archives ZIP.

Cette version utilisent les fonctions de la bibliothèque ZZIPlib de Guido Draheim. Vous devez avoir d'installer la bibliothèque ZZIPlib en version >= 0.10.6.

## PECL et PHP 5.2 ou suivant

La nouvelle version est fournie avec PHP 5.2.0 ou suivant et est disponible dans PECL depuis la version 1.1.0 ou suivant. Elle ne nécessite pas de bibliothèque externe. Elle peut lire et écrire des archives ZIP lorsqu'elle est utilisée avec PHP 5.1 ou suivant et elle ne peut que les lire lorsqu'elle est utilisée avec PHP 4.

# Installation

Cette extension PECL n'est pas intégrée à PHP. 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.

## Installation sous Linux

### Installation lorsque l'extension est fournie avec PHP 4

Pour pouvoir 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.

### Installation avec PECL ou fournie avec PHP 5.2 et suivant

Pour pouvoir utiliser ces fonctions, vous devez compiler PHP avec le support ZIP en utilisant l'option de configuration --enable-zip. Ceci ne nécessite pas de bibliothèque externe.

> Note : Vous pouvez utiliser la version PECL avec PHP 4. Pour cela, vous devez désactiver l'extension ZIP interne ou bien recompiler PHP sans celle-ci.

## Installation sous Windows

### Installation lorsque l'extension est fournie avec PHP 4

Les utilisateurs de Windows doivent activer la bibliothèque `php_zip.dll` dans le `php.ini` pour pouvoir utiliser ces fonctions. En PHP 4, cette bibliothèque DLL se trouve dans le dossier `extensions/` avec les binaires PHP pour Windows téléchargées. Vous pouvez télécharger ces bibliothèques DLL pour ces extensions PECL depuis la page de téléchargement de PHP sous sur la page http://snaps.php.net/.

> Note : Le support ZIP avant PHP 4.1.0 est expérimental. Cette section traite de l'extension ZIP tel qu'elle existe en PHP 4.1.0 et suivant.

### Installation avec PECL ou fournie avec PHP 5.2 et suivant

Les utilisateurs de WIndows doivent activer la bibliothèque `php_zip.dll` dans le `php.ini` pour pouvoir utiliser ces fonctions. En PHP 4, cette bibliothèque DLL se trouve dans le dossier `extensions/` avec les binaires PHP pour Windows téléchargées. Vous pouvez télécharger ces bibliothèques DLL pour ces extensions PECL depuis la page de téléchargement de PHP sous sur la page http://snaps.php.net/.

# 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 flags (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 consistences 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 renommage 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 inconsistente

`ZIPARCHIVE::ER_REMOVE` (entier)

  impossible d'effacer le fichier

`ZIPARCHIVE::ER_DELETED` (entier)

  l'entrée a été supprimée

# Exemples

Exemple 1. 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 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"; ?>`

Exemple 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.

Exemple 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_entry, zip_entry_filesize($zip_entry)); echo "$buf\n"; zip_entry_close($zip_entry); } echo "\n"; } zip_close($zip); } ?>`

Précédent | Sommaire | Suivant
yp_order | Niveau supérieur | zip_close