Warning: Unknown: Cannot destroy the zip context in Unknown on line 0
Warning: ZipArchive::close(): Can't remove file: No such file or directory in xxxx.php on line xx
PHP 5.6 ZipArchive 创建zip压缩文档时报出了以上第一条错误信息,而PHP 5.5 PHP 5.4 PHP 5.3中都没有报错,程序代码如下。- <?php
- $za = new ZipArchive;
- $za->open('51-n.com.zip',ZipArchive::CREATE|ZipArchive::OVERWRITE);
- ?>
复制代码 难道是因为没有调用 ZipArchive::close() 方法,于是有了以下代码- <?php
- $za = new ZipArchive;
- $za->open('51-n.com.zip',ZipArchive::CREATE|ZipArchive::OVERWRITE);
- $za->close();
- ?>
复制代码 Warning: ZipArchive::close(): Can't remove file: No such file or directory in xxxx.php on line xx 的错误信息又来了
后来终于发现,罪魁祸首是:压缩文件是空的,在PHP中,以上代码并没有实际地创建一个压缩文档,往这个压缩包中存入文件以后,这个压缩文件才会创建并保存到硬盘上。而且,如果使用了ZipArchive::OVERWRITE,同名的文件将在ZipArchive::open()以后被删除。
比如以下代码,我们将一个字符串作为文件压缩到了压缩包中,也没有调用ZipArchive::close()方法,代码执行成功,压缩文件成功保存到了硬盘上。- <?php
- $za = new ZipArchive;
- $za->open('51-n.com.zip',ZipArchive::CREATE|ZipArchive::OVERWRITE);
- $za->addFromString('wuxiancheng.cn.txt','yes');
- ?>
复制代码 当然了,把ZipArchive::close()加上是应该的。- <?php
- $za = new ZipArchive;
- $za->open('51-n.com.zip',ZipArchive::CREATE|ZipArchive::OVERWRITE);
- $za->addFromString('wuxiancheng.cn.txt','yes');
- $za->close();
- ?>
复制代码 Warning: ZipArchive::close(): Can't remove file: No such file or directory这个错误出现的原因,其实也很明显了,那就是在之前的代码中,根本就没有生成对应的压缩文件。 |
|