A-A+

linux下zipArchive终于工作了(附全部代码)

2016年01月04日 站长资讯 暂无评论

以前一直用的是.net ,由于考虑到开源问题,所以最近开始学php了。

由于以后准备长期在linux下使用计算机,所以特地将环境搭成了fedora20+apache+php+mysql。

由于也不是大咖,所以全部环境采用了yum安装。一路顺利。

目前学习到php多文件下载这一章节,前面的路还算一帆风顺,但到了这一章节,太不顺利了。首先是考虑到ZipArchive是需要扩展的,但因为自己是yum安装,所以不知道到底是不是安装了这个扩展。倒腾了好久才发现,其实yum安装已经替我安装了这个扩展,但最后还是证明,其实yum安装已经替我安装了这个扩展,并且这个扩展在phpinfo中对应zip模块。

闲话不多说,讲讲我今天遇到的问题,代码如下:

  1. while(true){  
  2.    $archiveName = md5(uniqid().time()).".zip";  
  3.    if(!file_exists("./".$archiveName))  
  4.             break;   
  5. }  
  6. $zip = new ZipArchive();  
  7. //根据文件名,打开一个zip压缩包,如果包不存在,则创建一个 ZipArchive::OVERWRITE  
  8. //这里打开的模式在linux下不可使用ZipArchive::OVERWRITE来自动创建ZIP包   
  9. if(!$zip->open($archiveName,ZipArchive::CREATE)){  
  10.     die("打开压缩包失败");  
  11. }  
  12. foreach($files as $v){  
  13.      $zip->addFile($v);  
  14. }  
  15.    
  16. //将文件放进zipArchive后要关闭zip 包,不然会下载到一个空包  
  17. $zip->close();  

反复测试,但就是无法生成正确的zip包,报错信息:ZipArchive::AddFile(): invalid or uninitialed object in .......

起初以为是zip模块的问题,但后来发现,$zip对象是实例化成功的。那就不应该是模块问题。

后来又发现,每次$zip->open()后,我的服务器端都没有产生对应的zip包。现在已经是凌晨,头晕晕的。

一觉醒来后,神清气爽。于是乎动手改DEMO。最后发现,是因为在linux环境下,不可使用ZipArchive::OVERWRITE来自动创建ZIP包,小小问题,耽误好久。希望这个问题能够帮到遇到同样问题的朋友。

最后我要感谢一下在学习过程中一直给予帮助的张双老师。

标签:

给我留言