我使用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');
我可以看到文件列表,但最终我无法找到的应该要创建的zip文件。 而我从ZipArchive没有错误/例外...
编辑:
我已经添加了print $zip->getStatusString();
后$zip->close();
它打印:无法打开文件:权限被拒绝”是什么意思我知道肯定每个目录是可写的,我BC可以创建,里面还PHP新文件...。?
编辑2:
if(is_writable(dirname($target)))
print 'target dir is writable...';
它打印出的,所以dir是可写的。 感觉就像我在暮色区是...
两点意见从php.net
如果您要添加多个文件到压缩和你的$ zip-> close()方法调用返回FALSE,确保所有你实际上添加的文件存在。 显然$ zip-> addFile()返回true,即使该文件实际上并不存在。 这是一个好主意,它调用zip- $> addFile()之前检查与file_exists()每个文件或is_readable()。
和
不要忘记检查拉链不为空,乡亲 - 否则拉链不会在所有创建的,而服务器会发出任何警告!
听起来像是你有一个权限问题,要么写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');