Decompression des fichiers zip, rar

Signaler
Messages postés
5
Date d'inscription
dimanche 20 mai 2012
Statut
Membre
Dernière intervention
11 décembre 2012
-
Bonjour à tous,
Je développe un outil de décompression de fichiers (zip, rar,...), j'arrive seulement à décompresser que quelque fichier zip.
Mon problème se situe au niveau d'une décompression récursive de fichier
- J'arrive pas à décompresser un fichier zip ayant des sous répertoires (donc le cas d'une décompression récursive de fichier)
- J'arrive pas à décompresser un fichier rar

D'avance merci pour vos réponses

Voici le code php:

<?php
$file=$_FILES['avatar']['name'];
$nb=strpos($file,'.');
$rep=substr($file,0,-3);
$path="C:\\wamp\\www\\zippe\".$rep."\";
$dossier="C:\\wamp\\www\\Outil de verification\";
move_uploaded_file($_FILES['avatar']['tmp_name'], $dossier . $file);

//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*/
$effacer_zip=true;
$tab_liste_fichiers = array(); //Initialisation
$extension = strrchr($_FILES['avatar']['name'], '.');
if($extension==".rar")
{
$zip = rar_open($file);
echo $file;
if ($zip)
{
while ($zip_entry = rar_read($zip)) //Pour chaque fichier contenu dans le fichier zip
{
if (rar_entry_filesize($zip_entry) > 0)
{
$complete_path = $path.dirname(rar_entry_name($zip_entry));

/*On supprime les éventuels caractères spéciaux et majuscules*/
$nom_fichier = rar_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 (rar_entry_open($zip, $zip_entry, "r"))
{
$fd = fopen($complete_name, 'w');

fwrite($fd, rar_entry_read($zip_entry, rar_entry_filesize($zip_entry)));

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

rar_close($zip);
}

}else{

$zip = zip_open($file);
echo $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('util.zip','util/');

echo 'Le fichier zip contenait '.count($liste).' fichier(s) :
';

foreach ($liste as $nom_fichier)
{
echo $nom_fichier.'
';
}

?>

une petite précision : quand j’essaie de décompresser un fichier zip ayant des sous répertoires.

j'ai comme erreur:

- Warning: mkdir() [function.mkdir]: No such file or directory in C:\wamp\www\Outil de verification\decompression.php on line 98

- Warning: fopen(C:\wamp\www\zippe\testzip.\testzip/ia/ia.docx) [function.fopen]: failed to open stream: No such file or directory in C:\wamp\www\Outil de verification\decompression.php on line 105

- Warning: fwrite() expects parameter 1 to be resource, boolean given in C:\wamp\www\Outil de verification\decompression.php on line 107

- Warning: fclose() expects parameter 1 to be resource, boolean given in C:\wamp\www\Outil de verification\decompression.php on line 109