找回密码
 注册

[PHP] Warning: Unknown: Cannot destroy the zip context in Unknown on line 0

php 发表于 2015/11/29 02:00 | 显示全部楼层 |阅读模式
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中都没有报错,程序代码如下。
  1. <?php                 
  2.         $za = new ZipArchive;
  3.         $za->open('51-n.com.zip',ZipArchive::CREATE|ZipArchive::OVERWRITE);
  4. ?>
复制代码
难道是因为没有调用 ZipArchive::close() 方法,于是有了以下代码
  1. <?php                 
  2.         $za = new ZipArchive;
  3.         $za->open('51-n.com.zip',ZipArchive::CREATE|ZipArchive::OVERWRITE);
  4.         $za->close();
  5. ?>
复制代码
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()方法,代码执行成功,压缩文件成功保存到了硬盘上。
  1. <?php                 
  2.         $za = new ZipArchive;
  3.         $za->open('51-n.com.zip',ZipArchive::CREATE|ZipArchive::OVERWRITE);
  4.         $za->addFromString('wuxiancheng.cn.txt','yes');
  5. ?>
复制代码
当然了,把ZipArchive::close()加上是应该的。
  1. <?php                 
  2.         $za = new ZipArchive;
  3.         $za->open('51-n.com.zip',ZipArchive::CREATE|ZipArchive::OVERWRITE);
  4.         $za->addFromString('wuxiancheng.cn.txt','yes');
  5.         $za->close();
  6. ?>
复制代码
Warning: ZipArchive::close(): Can't remove file: No such file or directory这个错误出现的原因,其实也很明显了,那就是在之前的代码中,根本就没有生成对应的压缩文件。

手机版|轻松E站

轻松E站

快速回复 返回顶部 返回列表