使用php解压缩服务器上的zip存档

时间:2015-07-22 14:14:16

标签: php server unzip

我尝试过一些方法用php自动解压缩文件,但所有这些都失败了:

第一个变种

<?php
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;
} 
$file = 'file_name.zip';
echo unzip($file);

第二个变种

<?php
$zip = zip_open("my_linkedin_groups_scrape_my_run_1_2015.zip");
if ($zip) {
while ($zip_entry = zip_read($zip)) {
  $fp = fopen("./".zip_entry_name($zip_entry), "w");
  if (zip_entry_open($zip, $zip_entry, "r")) {
    $buf = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry));
    fwrite($fp,"$buf");
    zip_entry_close($zip_entry);
   fclose($fp);
  }
 }
 zip_close($zip);
}
?>

第3个变种

<?php 
// assuming file.zip is in the same directory as the executing script.
$file = 'file.zip';

// get the absolute path to $file
$path = pathinfo(realpath($file), PATHINFO_DIRNAME);

$zip = new ZipArchive;
$res = $zip->open($file);
if ($res === TRUE) {
  // extract it to the path we determined above
  $zip->extractTo($path);
  $zip->close();
  echo "WOOT! $file extracted to $path";
} else {
  echo "Doh! I couldn't open $file";
}
?>
第三种情况输出的

Doh! I couldn't open file.zip

出了什么问题?我缺少什么? 我

2 个答案:

答案 0 :(得分:1)

似乎是写/读权限的问题 将用于测试目的的权限更改为0777

答案 1 :(得分:0)

我会选择第3种变体。尝试使用绝对路径来压缩文件并在错误消息中转储$ res。它会说错误,只需将其与特定错误代码http://php.net/manual/en/ziparchive.open.php进行比较。