85 lines
2.5 KiB
PHP
85 lines
2.5 KiB
PHP
|
<?php
|
||
|
|
||
|
/*
|
||
|
Description :
|
||
|
Fonction récursive zippant le contenu du répertoire passé en paramètre, incluant tous les sous dossiers et tous les fichiers
|
||
|
|
||
|
Note :
|
||
|
Le script doit avoir les autorisations adéquates pour le dossier de destination !
|
||
|
|
||
|
Prototype :
|
||
|
bool zip( string $nom_archive , string $adr_dossier [, string $dossier_destination] )
|
||
|
/!\ Les paramètres $zip et $dossier_base ne doivent pas être modifiés /!\
|
||
|
|
||
|
Paramètres :
|
||
|
string $nom_archive : le nom de l'archive qui sera créée se terminant par '.zip' (ex. 'archive.zip', 'test.zip', etc.)
|
||
|
string $adr_dossier : le dossier à archiver (ex. 'images', '../dossier1/dossier2', etc.)
|
||
|
string $dossier_destination : le dossier dans lequel placer l'archive une fois celle-ci créée (ex. 'images/zip', '../archives', etc.)
|
||
|
|
||
|
Retourne :
|
||
|
True si ça a marché, false le cas échéant
|
||
|
*/
|
||
|
function zip($nom_archive, $adr_dossier, $dossier_destination = '', $zip=null, $dossier_base = '') {
|
||
|
if($zip===null) {
|
||
|
// Si l'archive n'existe toujours pas (1er passage dans la fonction, on la crée)
|
||
|
$zip = new ZipArchive();
|
||
|
if($zip->open($nom_archive, ZipArchive::CREATE) !== TRUE) {
|
||
|
// La création de l'archive a échouée
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if(substr($adr_dossier, -1)!='/') {
|
||
|
// Si l'adresse du dossier ne se termine pas par '/', on le rajoute
|
||
|
$adr_dossier .= '/';
|
||
|
}
|
||
|
|
||
|
if($dossier_base=="") {
|
||
|
// Si $dossier_base est vide ça veut dire que l'on rentre
|
||
|
// dans la fonction pour la première fois. Donc on retient
|
||
|
// le tout premier dossier (le dossier racine) dans $dossier_base
|
||
|
$dossier_base=$adr_dossier;
|
||
|
}
|
||
|
|
||
|
if(file_exists($adr_dossier)) {
|
||
|
if(@$dossier = opendir($adr_dossier)) {
|
||
|
while(false !== ($fichier = readdir($dossier))) {
|
||
|
if($fichier != '.' && $fichier != '..') {
|
||
|
if(is_dir($adr_dossier.$fichier)) {
|
||
|
$zip->addEmptyDir($adr_dossier.$fichier);
|
||
|
zip($nom_archive, $adr_dossier.$fichier, $dossier_destination, $zip, $dossier_base);
|
||
|
}
|
||
|
else {
|
||
|
$zip->addFile($adr_dossier.$fichier);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if($dossier_base==$adr_dossier) {
|
||
|
// On ferme la zip
|
||
|
$zip->close();
|
||
|
|
||
|
if($dossier_destination!='') {
|
||
|
if(substr($dossier_destination, -1)!='/') {
|
||
|
// Si l'adresse du dossier ne se termine pas par '/', on le rajoute
|
||
|
$dossier_destination .= '/';
|
||
|
}
|
||
|
|
||
|
// On déplace l'archive dans le dossier voulu
|
||
|
if(rename($nom_archive, $dossier_destination.$nom_archive)) {
|
||
|
return true;
|
||
|
}
|
||
|
else {
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
else {
|
||
|
return true;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
?>
|