Php ZipArchive关闭时发出警告

Php ZipArchive关闭时发出警告,php,ziparchive,Php,Ziparchive,我正在尝试修复一些图像的auto-zip脚本中的一个问题,这是我不久前编写的,直到现在仍然有效。在$zip->close()之前,一切似乎都很好提供以下信息: <b>Warning</b>: ZipArchive::close(): Read error: No such file or directory in <b></b> on line <b>287</b><br /> 事实证明,该解决方案非常简单

我正在尝试修复一些图像的auto-zip脚本中的一个问题,这是我不久前编写的,直到现在仍然有效。在
$zip->close()之前,一切似乎都很好提供以下信息:

 <b>Warning</b>:  ZipArchive::close(): Read error: No such file or directory in <b></b> on line <b>287</b><br />

事实证明,该解决方案非常简单,实际上在文档(php.net)中的一条注释中提到了它:

对一些人来说,这似乎有点明显,但这是我的疏忽

如果要将要删除的文件添加到zip文件中,请确保在调用close()函数后删除

如果添加到对象的文件在保存时不可用,则不会创建zip文件

(来源:)

因此,从我上面的代码来看,“虚拟”文本文件在zip关闭之前就被删除了,这必然会使文件在创建zip时不存在

我有充分的理由相信zip是在一个临时位置创建的,只在
close()
上移动到最终位置。事实并非如此。

检查行中“$full\u thumb\u path”的值

    $file_added = $zip->addFile($full_thumb_path, basename($item['thumb']));
该值应该是一个文件路径,而不能是一个目录路径。

正因为这在Google中是错误消息的#1,我添加了另一个可能导致此完全相同错误的问题

如果未向zip存档添加任何文件,则该存档文件尚不存在,因此close()将在空存档文件上失败

例如:

产生:

ERROR: ZipArchive::close(): Can't remove file: No such file or directory

因此,如果要循环并添加文件,请确保在调用close()之前添加了一些内容。

即使它是一个目录,如果没有删除虚拟文件,它也不会在脚本中的zip_close()上发出警告。我只是在phing构建过程中遇到了这个问题。消息:[PHP Error]ZipArchive::close():读取错误:是一个目录-->答案很简单,只是因为文件树中有一些符号链接。o,你是如何解决代码中的问题的?我将$zip->close()移动到删除文本文件之前的某个点。
$zip = new ZipArchive;
$zip->open("foo.zip", ZipArchive::CREATE | ZipArchive::OVERWRITE);
$zip->close();
ERROR: ZipArchive::close(): Can't remove file: No such file or directory