Creer un fichier zip a partir d'un dossier.

Fermé
anesr Messages postés 22 Date d'inscription mercredi 26 février 2014 Statut Membre Dernière intervention 10 novembre 2016 - Modifié par anesr le 5/09/2016 à 11:30
arshi92 Messages postés 131 Date d'inscription mercredi 27 juin 2012 Statut Membre Dernière intervention 12 octobre 2017 - 8 sept. 2016 à 10:24
Bonjour la communauté informatique,
Je sollicite votre aide afin de m'aider à avancer dans mes travaux car je fais actuellement face à une difficulté.
En effet je souhaiterai ajouter un peu de code dans mon script PHP afin de créer une archive .zip a partir d'un répertoire présent à un endroit bien précis sur mon réseau.
Le dossier en question se nomme "images", il contient plusieurs images bien évidemment.
Cependant je ne maitrise pas beaucoup le PHP et j'ai beaucoup de mal à avancer dans mon travail.
Pourriez vous m'apporter votre soutient s'il vous plait.
Voici mon code et le bloc que j'ai ajouter pour créer l'archive zip.

----------------------------------------------------------------------------------------------------------------------------------
<?php

// function for create images
function createImages($absolute_results_dir, $image_check) {
set_default_values();
//list all gmt files
$gmt_files = m_find_in_dir($absolute_results_dir, ".*\.gmt$");
foreach($gmt_files as $a_gmt_file){
//foreach gmt file create images
createImagesForGMTFile($absolute_results_dir, $a_gmt_file, $image_check);
}

//clean result dir
exec ("mkdir -p $absolute_results_dir/images");
exec ( "mv $absolute_results_dir/*.jpg $absolute_results_dir/images");
exec ( "mv $absolute_results_dir/*.ps $absolute_results_dir/images");
exec ( "mv $absolute_results_dir/*.xyz $absolute_results_dir/alog");
exec ( "mv $absolute_results_dir/tmptext $absolute_results_dir/alog");
exec ( "mv $absolute_results_dir/triangle.txt $absolute_results_dir/alog");

// TEST CREATION DOSSIER ZIP

$zip = new ZipArchive();
// On ouvre l’archive.
if($zip->open('Zip.zip') == TRUE)
// On crée l’archive.
if($zip->open('Zip.zip', ZipArchive::CREATE) == TRUE)
{
echo '"Zip.zip" ouvert';

$zip->close();
}
else
{
echo 'Impossible d'ouvrir "Zip.zip"';
// Traitement des erreurs avec un switch(), par exemple.
}
}
// FIN TEST CREATION DOSSIER ZIP

1 réponse

arshi92 Messages postés 131 Date d'inscription mercredi 27 juin 2012 Statut Membre Dernière intervention 12 octobre 2017 17
5 sept. 2016 à 14:21
Bonjour.
J'ai un script mais qui nécessite deux fichiers.

1. zipper.function.php // Qui contient les fonctions
2. zipper.php // Qui zip le dossier

CONTENU DE ZIPPER.FUNCTION.PHP


<?php


function zipper_repertoire_recursif($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);
						zipper_repertoire_recursif($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;
		}
	}
}

?>



Imaginons que le répertoire images soit dans le même répertoire que zipper.php.
CONTENU DE ZIPPER.PHP :


<?php
require_once("zipper.function.php");

if(zipper_repertoire_recursif('images.zip', 'images'))
{
	// Si la fonction retourne true, c'est que ça a marché
	// Le deuxième paramètre '.' indique que l'on veut archiver le répertoire actuel, j'aurais 
	// très bien pu mettre 'monrepertoire/sousrepertoire' à la place...
	 
	echo "<h1 style='color:green;'>L'archive a bien été créée</h1>";
}
else
{
	echo "<h1 style='color:red;'>L'archive n'a pas été créée</h1>";
}
?>




Voilà. J'espère avoir aidé. :-)
0
anesr Messages postés 22 Date d'inscription mercredi 26 février 2014 Statut Membre Dernière intervention 10 novembre 2016
7 sept. 2016 à 13:58
Merci pour ta réponse et pour ton aide arshi 92. Apres avoir posté mon message j'ai continué mes recherches et j'ai trouver un moyen de faire la meme chose en intgrant quelque commande linux dans mon php.
Ça se présente comme ça

exec ( "cd $absolute_results_dir; zip -rj image ./images/*");

et ça à l'air de bien fonctionner.
:)
0
arshi92 Messages postés 131 Date d'inscription mercredi 27 juin 2012 Statut Membre Dernière intervention 12 octobre 2017 17 > anesr Messages postés 22 Date d'inscription mercredi 26 février 2014 Statut Membre Dernière intervention 10 novembre 2016
8 sept. 2016 à 10:24
C'est super alors @anesr.
Bonne journée. :-)
0