PHP et comment décompresser une archive ZIP

Dézipper un archive ZIP

Unzip file in PHP

Aujourd’hui, lorsqu’on recherche comment décompresser une archive de type ZIP en PHP dans Google, on trouve en première position les fonctions d’extraction de la librairie PECL. Mais n’est-il pas possible de décompresser ce format standard sans devoir passer par une bibliothèque tierce ? Si ! C’est d’ailleurs cette solution que je vous recommande. Et ce pour une multitude de raisons :

  • Aucune bibliothèque supplémentaire.
  • Fonctionnalité déjà intégré.
  • Fonctionnalité commune sur toutes les plateformes disposant de PHP 4 >= 4.1.0 ou PHP 5 >= 5.1.0
  • Facile à installer grâce à apt-get pour les linuxiens ou grâce aux différents tutoriels pour les autres plateformes.
  • Limiter la redondance de code car il faut bien se le dire, l’API de PECL à beau être plus facile à appréhender le code que l’on dira de « bas niveau » est le même, que l’on passe par PHP natif ou par PECL ZipArchive

Script

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
function unzip($path_zip, $tmp_folder = "/tmp/")
{
$all_files = array();
$zip = zip_open($path_zip);
if ($zip) {
$stream = zip_read($zip);
while ($stream) {
var_dump($zip_name);
$zip_name = zip_entry_name($stream);
$path_file_unzip = $tmp_folder.$zip_name;
$dir_folder = substr($path_file_unzip, 0, strrpos($path_file_unzip, "/"));
mkdir($dir_folder, 0777, true);
$fp = fopen($path_file_unzip, "w");
array_push($all_files, $path_file_unzip);
if (zip_entry_open($zip, $stream, "r")) {
$buf = zip_entry_read($stream, zip_entry_filesize($stream));
fwrite($fp, "$buf");
zip_entry_close($stream);
fclose($fp);
}
$stream = zip_read($zip);
}
zip_close($zip);
}
return $all_files;
}