192.168.1.1-路由器设置 | 192.168.0.1-无线路由器设置

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

发布时间:2015-02-16 22:29

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

关于我们 - RSS地图 - 最近更新 - 友情链接 - 网站地图 - 版权声明