当前位置: 首页 > 工具软件 > PhpZip > 使用案例 >

addfile php,解决php ZipArchive::addFile(): Invalid or uninitialized Zip object错误

程赞
2023-12-01

在使用php创建压缩包时使用下面的代码:

if ($zip->open($zipFilename, \ZipArchive::OVERWRITE) === TRUE) {

if (file_exists($targetPath)) {

Zip::addFileToZip($targetPath, $zip);//执行递归压缩目录的操作

} else {

throw new NotFoundHttpException('该目录不存在或被删除');

}

}

?>

在本地开发环境各种测试没有问题,部署到测试环境,就报出这个错误:

ZipArchive::addFile(): Invalid or uninitialized Zip object

反复对比开发环境很测试环境配置,感觉不是配置问题,最后求助搜索引擎,看到有人提示:

\ZipArchive::CREATE | \ZipArchive::OVERWRITE

顿时感觉可能是没有创建文件导致,没有创建Zip object.

修改代码:

if ($zip->open($zipFilename, \ZipArchive::CREATE | \ZipArchive::OVERWRITE) === TRUE) {

if (file_exists($targetPath)) {

Zip::addFileToZip($targetPath, $zip);//执行递归压缩目录的操作

} else {

throw new NotFoundHttpException('该目录不存在或被删除');

}

}

?>

问题就解决了。

附Zip处理类:

class Zip {

public static function addFileToZip($path, &$zip, $root = '') {

$handler = opendir($path); //打开当前文件夹由$path指定。

!$root && $root = $path;

while (($filename = readdir($handler)) !== false) {

if ($filename != "." && $filename != "..") { // 文件夹文件名字为'.'和‘..’,不要对他们进行操作

if (is_dir($path . "/" . $filename)) { // 如果读取的某个对象是文件夹,则递归

self::addFileToZip($path . "/" . $filename, $zip, $root);

} else { // 将文件加入zip对象

$pathFilename = $path . "/" . $filename;

$zip->addFile($pathFilename, str_replace($root . '/', '', $pathFilename));

}

}

}

@closedir($path);

}

}

?>

 类似资料: