我对PHP 5.2x和“ZipArchive”感到疯狂,以下代码不会抛出错误,每个部分都返回true,但是没有创建ZIP文件。
有人能看到我没看到的错误吗?
if ($handle = opendir($directory)) {
$zip = new ZipArchive();
$filename = time() . '.zip';
$path = APPLICATION_PATH . '/../download/';
$status = $zip->open($path . $filename, ZIPARCHIVE::CREATE);
if ($status !== true) {
$this->log->err('Cant create zipArchive!');
return false;
}
while (false !== ($file = readdir($handle))) {
if (!is_dir($file)) {
if (is_readable($file)) {
if (!$zip->addFile($file)) {
$this->log->err('Cant add File to archive: ' . $file);
}
} else {
$this->log->debug('Added file to archive: ' . $file);
}
}
}
closedir($handle);
if (!$zip->close()) {
$error = $zip->getStatusString();
$this->log->err($error);
$this->log->err('Cant create archive..');
}
}
答案 0 :(得分:1)
您永远不会在ZIP存档中添加任何文件。这是你没有错误的唯一原因。
is_readable($file)
始终返回false
,并且在打印Added file to archive ...
时,可能是因为您错放了else
块。
您必须将文件夹添加到$file
,在您的情况下应该是$directory
:
while (false !== ($file = readdir($handle))) {
if (!is_dir($directory . $file)) {
if (is_readable($directory . $file)) {
if (!$zip->addFile($directory . $file)) {
$this->log->err('Cant add File to archive: ' . $file);
} else {
$this->log->debug('Added file to archive: ' . $file);
}
} else {
$this->log->debug('File not readable: ' . $file);
}
}
}