Ale*_*lex 8 php zip file ziparchive
我正在使用ZipArchive:
function zip_dir($source, $target){
$iterator = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($source, \FilesystemIterator::SKIP_DOTS), \RecursiveIteratorIterator::SELF_FIRST);
$zip = new \ZipArchive();
if($zip->open($target, \ZipArchive::CREATE) !== true)
exit('cannot create zip');
foreach($iterator as $file){
$zip->addFile($file);
print $file . '<br>';
}
$zip->close();
return $target;
}
zip_dir(__DIR__ . '/test/', __DIR__ . '/testarchive.zip');
Run Code Online (Sandbox Code Playgroud)
我可以看到文件列表,但最后我找不到应该创建的zip文件.我从ZipArchive得到没有错误/异常......
编辑:
之后我添加print $zip->getStatusString();了$zip->close();
并且它打印:无法打开文件:权限被拒绝".这是什么意思?我知道每个目录都是可写的,但是我可以在里面用PHP创建新文件...
编辑2:
if(is_writable(dirname($target)))
print 'target dir is writable...';
Run Code Online (Sandbox Code Playgroud)
它打印出来,所以dir是可写的.感觉就像我在暮光之城......
来自php.net的两条评论
如果您要将多个文件添加到zip并且$ zip-> close()调用返回FALSE,请确保您添加的所有文件实际存在.显然,$ zip-> addFile()即使文件实际上不存在也会返回TRUE.在调用$ zip-> addFile()之前,最好使用file_exists()或is_readable()检查每个文件.
和
不要忘记检查zip不是空的,伙计 - 否则根本不会创建zip,服务器不会发出警告!
听起来你有一个权限问题,无论是写入zip文件,还是读取它正在压缩的文件.
我会用的组合file_exists,is_readable以及is_writable找出哪一个是造成问题的原因.
function zip_dir($source, $target){
$iterator = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($source, \FilesystemIterator::SKIP_DOTS), \RecursiveIteratorIterator::SELF_FIRST);
$zip = new \ZipArchive();
if($zip->open($target, \ZipArchive::CREATE) !== true)
exit('cannot create zip');
foreach($iterator as $file){
if (!file_exists($file)) { die($file.' does not exist'); }
if (!is_readable($file)) { die($file.' not readable'); }
$zip->addFile($file);
print $file . '<br>';
}
$zip->close();
return $target;
}
if (!is_writable(__DIR__)) { die('directory not writable'); }
zip_dir(__DIR__ . '/test/', __DIR__ . '/testarchive.zip');
Run Code Online (Sandbox Code Playgroud)