2016-05-04 88 views
4

所以,我试图创建一个批量上传功能,使用户可以上传包含一堆然后将得到处理并存储在服务器等PHP ZipArchive extractTo发出

因此,对PDF文件的一个zip文件到目前为止,我有这个...

$serverpath = $_SERVER['DOCUMENT_ROOT']; 

if(array_key_exists('bulk_filename', $_FILES)){ 
    if ($_FILES['bulk_filename']['error'] === UPLOAD_ERR_OK) { 

     $file_name = $_FILES['bulk_filename']['name']; 
     $new_zip_file = $serverpath . '/customerdata/tmp_invoices/' . $file_name; 
     move_uploaded_file($_FILES['bulk_filename']['tmp_name'], $new_zip_file); 

     // zip file is coming in as "-rw-r--r--" and should be "-rwxr-xr-x" 
     exec('chmod -R 755 ' . $serverpath . '/customerdata/tmp_invoices/' . $file_name); 

     // Extract the files from zip 
     $zip = new ZipArchive; 
     $res = $zip->open($new_zip_file, ZipArchive::OVERWRITE); 
     if ($res !== true) { 
      die("Cannot open {$new_zip_file} for writing!"); 
     } 
     else{ 
      $res = $zip->extractTo($serverpath . '/customerdata/tmp_invoices/'); 
      $zip->close(); 

      //////////////////////////////////////////// 
      // I ALWAYS REACH THIS CODE BLOCK 
      // and $res always equals 1/true 
      //////////////////////////////////////////// 
     } 
    } else 
     die("Upload failed with error code " . $_FILES['bulk_filename']['error']); 
} 

我看到的问题是,即使extractTo函数返回一个成功的提取(1),我看不出有明显被解压缩的文件?

我总是看到Archive.zip文件,所以我知道是否被正确上传...

-rwxr-xr-x 1 nginx nginx 68512374 May 4 12:39 Archive.zip 

任何想法,我在做什么错? : -/

环境: CentOS 6的运行PHP 5.3.3

UPDATE

以下(含完全合格的路径)抛出任何错误,只是似乎没有做任何形式的提取?!

$zip->extractTo($serverpath . '/customerdata/tmp_invoices/'); 

下面的(有相对路径),会抛出一个Warning: ZipArchive::extractTo(): Permission denied in...错误?!

$zip->extractTo('/customerdata/tmp_invoices/'); 

干杯家伙

回答

1

对于那些你觉得这个问题是由于遇到类似问题......

我设法通过改变第二个参数“解决”这个问题:

从本$zip->open($new_zip_file, ZipArchive::OVERWRITE)

TO THIS$zip->open($new_zip_file, ZipArchive::CREATE)

php.net

ZipArchive::CREATE (integer)

创建归档文件,如果它不存在。

ZipArchive::OVERWRITE (integer)

始终启动一个新的存档,这种模式将覆盖该文件,如果它已经存在。