PHP Zip 创建类 ZipArchive 未找到错误

5
我正在尝试创建一个基于我在这里找到的内容的zip脚本,但是当我使用new ZipArchive()函数时出现了致命错误:Class 'ZipArchive' not found。

研究后发现,这通常是由于PHP编译方式的问题引起的。我有一个共享主机帐户,所以我没有配置过任何相关设置...并且我认为我不能对构建进行任何更改。出于好奇,我查看了我的phpinfo()并发现了一些看起来相关的东西:

PHP版本5.2.6

BZip2 Support   Enabled    <--maybe not so relevant
ZLib Support    enabled
Stream Wrapper support  compress.zlib://
Stream Filter support   zlib.inflate, zlib.deflate
Compiled Version    1.1.4
Linked Version  1.1.4 

我不确定这是否意味着我有创建zip文件的能力。以下是我的脚本,提供更多信息(尽管我认为这并不相关)。需要说明的是,由于我无法通过“类未找到”错误,因此此脚本未经过测试。

$file = tempnam("tmp", "zip");
$zip = new ZipArchive();
$zip->open($file, ZipArchive::OVERWRITE);


   //the string "file1" is the name we're assigning the file in the archive
$zip->addFile('show1.jpg', 'file1.jpg');
$zip->addFile('show2.jpg', 'file2.jpg');
$zip->addFile('show3.jpg', 'file3.jpg');
$zip->addFile('show4.jpg', 'file4.jpg');
$zip->addFile('show5.jpg', 'file5.jpg');
$zip->addFile('show6.jpg', 'file6.jpg');

// echo $zip->file(); //this sends the compressed archive to the output buffer instead of writing it to a file.

$zip->close();
header('Content-Type: application/zip');
header('Content-Length: ' . filesize($file));
header('Content-Disposition: attachment; filename="' . $file.'"');
readfile($file);
unlink($file); 

我的问题真正是:
  1. 我在脚本中做了什么导致了这个错误?
  2. 我的phpinfo()中的任何内容是否意味着我应该能够创建zip文件,如果不是,那我应该在其中寻找什么来知道我是否具备这个功能。
  3. 看起来这个ZLib是某种库,但我不知道它是否能做我想要的事情,甚至如何使用它...这是一个猜想,但如果它可以帮助我创建zip文件,有人能指引我如何使用它吗?
提前感谢。 丹
4个回答

3

2
我认为,由于我是使用共享托管帐户,所以我不能这样做?Web托管提供商(在我的情况下是streamline.net)是唯一可以重新编译php/添加正确内容的人?还是我可以做些什么? - Dan Twining
4
如果您的托管提供商不会重新生成支持zip的PHP环境,那么PCLZip库可能是一种替代选择。 - Mark Baker
@Mark Baker 谢谢 Mark,我今天早上一直在研究 PCLZip,它完美地运行了! - Dan Twining

1

尽管zlib是一个重要的压缩库,但您似乎缺少zip扩展本身。看起来您从phpinfo获取了信息 -- 查找确切的词语"zip扩展"。如果您找不到它们,那么您没有安装它,并且因此无法使用其提供的功能和方法。


0
你可以作为最后的办法尝试 dl("zip.so");,但这个扩展很少被当做外部模块构建。你可能会在某些地方找到它可下载,或者甚至可以通过从PHP源代码或 http://pecl.php.net/package/zip 中使用 pecl build 来手动编译它。
否则,你将不得不寻找替代方案。http://pear.php.net/package/Archive_Zip 是一个不错的选择。

0

如果您升级了PHP版本或zip扩展不存在

那么您需要安装它。

1)打开终端

2)sudo apt-get install php7.0-zip

3)sudo service apache2 restart


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接