PHP ZipArchive extractTo issues


PHP ZipArchive extractTo issues

因此,我试图创建一个批量上传功能,用户可以上传一个包含一堆PDF的zip文件,然后这些PDF将被处理并存储在服务器等上。

到目前为止,我有这个。。。

$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

你知道我做错了什么吗?!:-/

环境:运行PHP 5.3.3 的Centos 6

更新

下面(带有完全限定的路径)没有抛出任何错误,只是似乎没有进行任何提取?!

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

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

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

干杯伙计们

对于那些因为有类似问题而发现这个问题的人。。。

我设法通过更改第二个参数"修复"了这个问题:

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

到此$zip->open($new_zip_file, ZipArchive::CREATE)

php.net

ZipArchive::CREATE (integer)

如果存档不存在,请创建该存档。

ZipArchive::OVERWRITE (integer)

始终启动新的存档,如果文件已存在,此模式将覆盖该文件。