Unzip => décompresser un fichier zip

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

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.