因此,我尝试创建批量上传功能,用户可以上传包含大量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
关于我做错了什么的任何想法?! : - /
环境:运行PHP 5.3.3的Centos 6
更新
下面(使用完全限定的路径)不会抛出任何错误,只是似乎没有进行任何提取?!
$zip->extractTo($serverpath . '/customerdata/tmp_invoices/');
下面(带有相对路径)会引发Warning: ZipArchive::extractTo(): Permission denied in...
错误?!
$zip->extractTo('/customerdata/tmp_invoices/');
干杯球员
答案 0 :(得分:1)
对于那些由于遇到类似问题而发现此问题的人......
我设法通过更改第二个参数来“修复”此问题:
从此:$zip->open($new_zip_file, ZipArchive::OVERWRITE)
至此:$zip->open($new_zip_file, ZipArchive::CREATE)
<强> php.net 强>
ZipArchive::CREATE (integer)
如果档案不存在,请创建档案。
ZipArchive::OVERWRITE (integer)
始终启动新存档,如果文件已存在,此模式将覆盖该文件。