2010-11-02 9 views
1

J'ai la fonction ci-dessous, mais le problème est que le fichier zip va décompresser dans le répertoire de l'endroit où se trouve le fichier de cette fonction.Comment décompresser un fichier dans le répertoire précédent en utilisant PHP

Par exemple, j'ai admin/includes/zip_function.php.

  • Cette fonction décompresse le fichier: admin/includes/
  • Je veux qu'il décompressez à: admin/

Voici la fonction:

function unzip($file){ 

    $zip=zip_open(realpath(".")."/".$file); 
    if(!$zip) {return("Unable to proccess file '{$file}'");} 

    $e=''; 

    while($zip_entry=zip_read($zip)) { 
     $zdir=dirname(zip_entry_name($zip_entry)); 
     $zname=zip_entry_name($zip_entry); 

     if(!zip_entry_open($zip,$zip_entry,"r")) {$e.="Unable to proccess file '{$zname}'";continue;} 
     if(!is_dir($zdir)) mkdirr($zdir,0777); 

     #print "{$zdir} | {$zname} \n"; 

     $zip_fs=zip_entry_filesize($zip_entry); 
     if(empty($zip_fs)) continue; 

     $zz=zip_entry_read($zip_entry,$zip_fs); 

     $z=fopen($zname,"w"); 
     fwrite($z,$zz); 
     fclose($z); 
     zip_entry_close($zip_entry); 

    } 
    zip_close($zip); 

    return($e); 
} 

function mkdirr($pn,$mode=null) { 

    if(is_dir($pn)||empty($pn)) return true; 
    $pn=str_replace(array('/', ''),DIRECTORY_SEPARATOR,$pn); 

    if(is_file($pn)) {trigger_error('mkdirr() File exists', E_USER_WARNING);return false;} 

    $next_pathname=substr($pn,0,strrpos($pn,DIRECTORY_SEPARATOR)); 
    if(mkdirr($next_pathname,$mode)) {if(!file_exists($pn)) {return mkdir($pn,$mode);} } 
    return false; 
} 

Merci pour l'aide! -

Répondre

0

Faire:

$z=fopen("../".$zname,"w"); 

travaillé.

0

Vous devriez lire les documents pour fopen. Vous ne spécifiez pas de répertoire.

Commencez à accepter les réponses!

+0

J'ai vérifié les documents fopen ... Je ne sais pas comment cela m'aide? – Chris

2

Vous pouvez utiliser ZipArchive:

$zip = new ZipArchive; 
$zip->open('myfile.zip'); 
$zip->extractTo('/whatever/dir/you/want'); 

Assurez-vous que vous acceptez les réponses si vous voulez obtenir la meilleure aide!

+0

+1 Solution très propre –

Questions connexes