简短说明:
目录中有一些文件
Yii::app()->runtimePath.'/temp/myDir/';
这些文件应压缩在同一目录中,如:
Yii::app()->runtimePath.'/temp/myDir/files.zip
以下构造没有错误,但是没有创建zip文件。
$zip = new ZipArchive();
$path = Yii::app()->runtimePath.'/temp/myDir/';
// Open an empty ZIP-File to write into
$ret = $zip->open('files.zip', ZipArchive::OVERWRITE);
if ($ret !== TRUE) {
printf('Failed with code %d', $ret);
} else {
$options = array('add_path' => $path, 'remove_all_path' => TRUE);
$zip->addGlob('*.{png,gif,jpg,pdf}', GLOB_BRACE, $options);
$res = $zip->close();
}
我的错误是什么?目录名称正确且可写(CHMOD 777)。
答案 0 :(得分:2)
这是有效的(摘录):
$ret = $zip->open($path.'files.zip', ZipArchive::OVERWRITE);
...
$options = array('remove_all_path' => TRUE);
$zip->addGlob($path.'*.{png,gif,jpg,pdf}', GLOB_BRACE, $options);
答案 1 :(得分:0)
重新使用Alireza Fallah中的代码(How to zip a whole folder using PHP)将基本名称应用到文件的迭代中,你将拥有没有路径结构的zip :)
function create_zip($files = array(), $dest = '', $overwrite = false) {
if (file_exists($dest) && !$overwrite) {
return false;
}
if (($files)) {
$zip = new ZipArchive();
if ($zip->open($dest, $overwrite ? ZIPARCHIVE::OVERWRITE : ZIPARCHIVE::CREATE) !== true) {
return false;
}
foreach ($files as $file) {
$zip->addFile($file, basename($file));
}
$zip->close();
return file_exists($dest);
} else {
return false;
}
}
function addzip($source, $destination) {
$files_to_zip = glob($source . '/*');
create_zip($files_to_zip, $destination);
echo "done";
}
答案 2 :(得分:0)
问题很可能是传递给方法$flag
的错误ZipArchive::open ( string $filename [, int $flags ] )
参数。在您的情况下,它应该是$ret = $zip->open('files.zip', ZipArchive::CREATE | ZipArchive::OVERWRITE);
如果zip文件尚不存在,$ret = $zip->open('files.zip', ZipArchive::OVERWRITE); var_dump($ret);
将打印int(11)
,这是常量ZipArchive::ER_OPEN
的等效值,其描述为Can't open file.
。