linux下zipArchive终于工作了

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

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

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

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

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

while(true){
   $archiveName = md5(uniqid().time()).".zip";
   if(!file_exists("./".$archiveName))
            break; 
}



$zip = new ZipArchive();
//根据文件名,打开一个zip压缩包,如果包不存在,则创建一个 ZipArchive::OVERWRITE
//这里打开的模式在linux下不可使用ZipArchive::OVERWRITE来自动创建ZIP包
if(!$zip->open($archiveName,ZipArchive::CREATE)){
    die("打开压缩包失败");
}





foreach($files as $v){
     
     
     $zip->addFile($v);
    
}

//将文件放进zipArchive后要关闭zip 包,不然会下载到一个空包
$zip->close();

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

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

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

一觉醒来后,神清气爽。于是乎动手改DEMO。最后发现,是因为在linux环境下,

不可使用ZipArchive::OVERWRITE来自动创建ZIP包,小小问题,耽误好久。希望这个问题能够帮到遇到同样问题的朋友。
最后我要感谢一下在学习过程中一直给予帮助的张双老师。


郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。