以前一直用的是.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包,小小问题,耽误好久。希望这个问题能够帮到遇到同样问题的朋友。 最后我要感谢一下在学习过程中一直给予帮助的张双老师。
原文地址:http://3251598.blog.51cto.com/3241598/1614664