Как разархивировать файл в предыдущем каталоге с помощью PHP - PullRequest
1 голос
/ 03 ноября 2010

У меня есть функция ниже, но проблема в том, что zip-файл разархивируется в каталог, где находится файл этой функции.

Например, у меня есть admin / includes / zip_function.php.

  • Эта функция распаковывает файл в: admin / включает в себя /
  • Я хочу разархивировать на: admin /

Вот функция:

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;
}

Спасибо за помощь! -

Ответы [ 3 ]

2 голосов
/ 03 ноября 2010

Вы можете использовать ZipArchive :

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

Убедитесь, что вы принимаете ответы, если хотите получить лучшую помощь!

0 голосов
/ 03 ноября 2010

Выполнение:

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

работал.

0 голосов
/ 03 ноября 2010

Вы должны прочитать документы для fopen. Вы не указываете каталог.

Начни принимать ответы!

...