ZipArchive 关闭时的警告
2022-08-30 22:14:04
我正在尝试修复某些图像的自动压缩脚本中的问题,这是我不久前写的,直到现在才起作用。一切似乎都很好,直到给出以下内容:$zip->close();
<b>Warning</b>: ZipArchive::close(): Read error: No such file or directory in <b></b> on line <b>287</b><br />
我阅读了文档和一些论坛,发现这可能在以下情况之一中发生:
- 如果没有实际的文件被添加到zip中,因为PHP 5.6 - 这可能是一个可能的解释,因为我最近升级到了PHP 5.6。然而:
- 我在添加之前检查每个文件是否存在
- 我试图将一个虚拟的非空文本文件添加到zip中。将其添加到 zip 将返回 true,就像在文件上一样
file_exists()
- 当我回声时,它给出的数字至少为1(当zip除了假人之外没有文件时)
$zip->numFiles
- 如果需要写入zip的目录不存在或没有正确的权限:情况似乎并非如此,但只是为了确定,我在同一脚本中将文本文件写入同一文件夹并且没有问题
- 如果写入临时目录时出现问题。检查这一点有点困难,但我在同一个系统中有一个上传脚本,我确保没有磁盘空间问题等。
这是相关代码。某些变量是事先定义的。请注意,我将每个问题都写入我的日志,并且此脚本不会生成任何条目!
$zip_file = 'Project'.$project_id.'.zip';
$zip = new ZipArchive;
if ($zip_result = $zip->open($zip_path.'/'.$zip_file, ZIPARCHIVE::CREATE) !== true) {
echo 'Error creating zip for project: '.$project_id.'. Error code: '.$zip_result;
help::debugLog('Error creating zip for project: '.$project_id.'. Error code: '.$zip_result);
return false;
}
$file_list = array();
foreach ($item_thumbs as $item)
{
$full_thumb_path = $thumb_dir.'/'.$item['thumb'];
if (file_exists($full_thumb_path) and $item['thumb'])
{
$file_added = $zip->addFile($full_thumb_path, basename($item['thumb']));
if (!$file_added)
help::debugLog('Failed to add item thumb to project zip. Project: '.$project_id.', file name: '.$item['thumb']);
else
$file_list[] = $item['thumb'];
}
elseif ($item['thumb']) /* If thumb indicated in DB doesn't exist in file system */
help::debugLog('Item thumb file '.$item['thumb'].' from item: '.$item['id'].' is missing from its indended location: '.$full_thumb_path);
}
/* Added 2016-05-18 -- creates dummy file for the zip listing its contents, important in case zip is empty */
$file_list_path = $zip_path.'/file_list.txt';
if (!($file_list_file = fopen($file_list_path, 'w+')))
help::debugLog('Failed to create list file (intended for zip) for project: '.$project_id);
fwrite($file_list_file, "File list:\n");
fwrite($file_list_file, implode("\n", $file_list));
if (file_exists($file_list_path))
{
fclose($file_list_file);
if (!$zip->addFile($file_list_path))
help::debugLog('Failed to add list file to project zip for project: '.$project_id);
unlink($file_list_path);
}
else
help::debugLog('Failed to create list file (intended for zip) for project: '.$project_id);
$zip->close(); // line 287