Unzip => décompresser un fichier zip

Soyez le premier à donner votre avis sur cette source.

Vue 60 123 fois - Téléchargée 1 891 fois

Description

Bonjour à tous,
D'après ce que j'ai pu voir, beaucoup cherchent à décompresser des fichiers zip (moi le premier) => C'est bien pratique !
...mais peu savent comment faire (j'ai du chercher un bon moment sur les différents forum pour trouver un algorithme acceptable)

La source que je fourni est un dérivé d'un algo dont je me suis servi à la base.

Il suffit de s'en servir en compagnie d'un script qui permet d'uploder des fichiers sur un serveur et vous avez un puissant outil !

Source / Exemple :


<?php

function unzip($file, $path='', $effacer_zip=false)
{/*Méthode qui permet de décompresser un fichier zip $file dans un répertoire de destination $path
  et qui retourne un tableau contenant la liste des fichiers extraits
  Si $effacer_zip est égal à true, on efface le fichier zip d'origine $file*/
	
	$tab_liste_fichiers = array(); //Initialisation

	$zip = zip_open($file);

	if ($zip)
	{
		while ($zip_entry = zip_read($zip)) //Pour chaque fichier contenu dans le fichier zip
		{
			if (zip_entry_filesize($zip_entry) > 0)
			{
				$complete_path = $path.dirname(zip_entry_name($zip_entry));

				/*On supprime les éventuels caractères spéciaux et majuscules*/
				$nom_fichier = zip_entry_name($zip_entry);
				$nom_fichier = strtr($nom_fichier,"ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ","AAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn");
				$nom_fichier = strtolower($nom_fichier);
				$nom_fichier = ereg_replace('[^a-zA-Z0-9.]','-',$nom_fichier);

				/*On ajoute le nom du fichier dans le tableau*/
				array_push($tab_liste_fichiers,$nom_fichier);

				$complete_name = $path.$nom_fichier; //Nom et chemin de destination

				if(!file_exists($complete_path))
				{
					$tmp = '';
					foreach(explode('/',$complete_path) AS $k)
					{
						$tmp .= $k.'/';

						if(!file_exists($tmp))
						{ mkdir($tmp, 0755); }
					}
				}

				/*On extrait le fichier*/
				if (zip_entry_open($zip, $zip_entry, "r"))
				{
					$fd = fopen($complete_name, 'w');

					fwrite($fd, zip_entry_read($zip_entry, zip_entry_filesize($zip_entry)));

					fclose($fd);
					zip_entry_close($zip_entry);
				}
			}
		}

		zip_close($zip);

		/*On efface éventuellement le fichier zip d'origine*/
		if ($effacer_zip === true)
		unlink($file);
	}

	return $tab_liste_fichiers;
}
	
/**********************************************************/

$liste = array();
	
$liste = unzip('mon_fichier.zip','repertoire_destination/');

echo 'Le fichier zip contenait '.count($liste).' fichier(s) :<br />';

foreach ($liste as $nom_fichier)
{
	echo $nom_fichier.'<br />';
}

?>

Conclusion :


Dommage, à priori la fonction zip_open() ne fonctionne pas sur EasyPhp (du moins la version 1.7) même en ayant installé l'extension php_zip :-(
Si vous avez une solution je suis preneur.

En attendant vous pouvez tester sur un serveur distant.

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
8
Date d'inscription
lundi 3 mars 2003
Statut
Membre
Dernière intervention
31 janvier 2011

Bonjour,

Marche nikel, cependant j'aimerais exclure certaines extension de fichiers lors du désippage, par exemple interdire les .php et .exe

Une idée ?
Messages postés
29
Date d'inscription
mardi 19 avril 2005
Statut
Membre
Dernière intervention
13 octobre 2008

Thank's GREGGRAPH

ya pas de quoi :)

A+
Messages postés
62
Date d'inscription
dimanche 14 novembre 2004
Statut
Membre
Dernière intervention
21 avril 2010

simple et efficace le code de Takali!!!
Merci,
Messages postés
29
Date d'inscription
mardi 19 avril 2005
Statut
Membre
Dernière intervention
13 octobre 2008

PLUS SIMPLE :

<?php
$zip = new ZipArchive;
if ($zip->open('test.zip') === TRUE) {
$zip->extractTo('/mon/dossier/destination/');
$zip->close();
echo 'ok';
} else {
echo 'échec';
}
?>
Messages postés
14
Date d'inscription
dimanche 2 juillet 2006
Statut
Membre
Dernière intervention
17 février 2011

J'ai moi aussi le même problème avec mon hébergeur.

Fatal error: Call to undefined function zip_open() in /home/bisouren/public_html/unzip.php on line 11
Afficher les 51 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.