PHP : comment décompresser une archive ZIP
Dézipper une archive ZIP
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;
}
|