217

我有一个问题,我在 Linux 服务器上安装了“Archive_Zip 0.1.1”,但是当我尝试运行脚本来创建 zip 文件时,它给出了致命错误

致命错误:ZipArchive在...中找不到类

我把代码放在哪里

$zip = new ZipArchive;
var_dump($zip);
$res = $zip->open($filename, ZipArchive::OVERWRITE);
if ($res !== TRUE) {
    echo 'Error: Unable to create zip file';
    exit;
}
if (is_file($src)) {
    $zip->addFile($src);
} else {
    // echo "<br>" . dirname(__FILE__) . $src;//'/install1';
    if (!is_dir($src)) {
         $zip->close();
         @unlink($filename);
         echo 'Error: File not found';
         exit;
    }
    recurse_zip($src, $zip, $path_length);
}
$zip->close();
echo "<br>file name ".$filename;

但它没有找到类文件。

请告诉我解决方案。我应该怎么做才能解决问题?我也将文件放入php.ini脚本所在的文件夹,但它不起作用。

4

23 回答 23

247

要出现ZipArchive该类,PHP 需要安装zip 扩展

有关安装说明(Linux 和 Windows),请参阅此页面。

于 2010-10-06T12:49:51.843 回答
91

在带有 Ubuntu + nginx + php7 的 Amazon ec2 上,我遇到了同样的问题,使用以下方法解决了它:

sudo apt-get install php7.0-zip

于 2016-05-06T06:56:10.667 回答
41

在 ubuntu 桌面上,我不得不这样做。

sudo apt-get install php5.6-zip

这安装了库,但我仍然遇到同样的错误,所以我不得不使用以下命令重新启动 apache:

sudo service apache2 restart

它奏效了。

于 2016-10-28T12:10:29.037 回答
23

我在这里没有看到它,所以我想在 Debian/Ubuntu 上添加它,您可能需要在安装相关软件包后启用扩展。所以:

sudo apt-get install php-zip
sudo phpenmod zip
sudo service apache2 restart
于 2017-10-16T06:54:04.400 回答
21

首先,远程服务器的解决方案:

如果您使用的是cpanel,您可能安装了 zip 扩展但未激活。你需要激活它。对于这种情况,您需要转到cpanel > inside software section > 点击 PHP version。然后找到zip并检查它。现在保存。

你应该看到像图像。 在此处输入图像描述

刷新页面。错误应该消失。

注意:如果没有找到,请联系服务器提供商。他们将为您安装。

于 2017-11-17T02:39:20.743 回答
9

Centos 6

或任何基于 RHEL 的风味

yum install php-pecl-zip

service httpd restart
于 2018-10-10T13:57:04.007 回答
7

如果您有可用的 WHM,那就更容易了。

登录到WHM

转到软件选项卡下的EasyApache 4(或您拥有的任何版本) 。

在当前安装的软件包下单击自定义

转到PHP Extensions,在搜索类型“ zip ”(不带引号)中,

你应该看到 3 个模块

检查所有这些,

单击蓝色按钮几次以完成该过程。

这对我有用。谢天谢地,我有 WHM 可用。

于 2018-05-15T11:36:49.990 回答
5

您还需要编译带有 zip 支持的 PHP。手册说如下:

为了使用这些函数,您必须使用 --enable-zip 配置选项编译带有 zip 支持的 PHP。

仅仅在服务器上安装正确的扩展是不够的。查看 Pekka 之前发布的安装说明链接。我的回答只是对他的澄清。

于 2010-10-06T13:08:07.243 回答
5

我在安装CentOScPanel的服务器上遇到了同样的问题。我通过 cPanel 安装了 zipArchive 包,但没有按预期工作。在尝试了如此多的修复建议之后,以下内容对我有用。

首先使用以下命令找到正确包的名称

yum search zip |grep -i php

然后使用下面的代码。

yum install your_zip_package_name_with_php_version

在我的情况下,安装 zipArchive 的正确代码是

yum install php-pecl-zip.x86_64

我有这个链接的解决方案。 如何使用 CentOS 7 在 PHP 7.2 上安装 zipArchive?

而且这种安装也以某种方式启用了该软件包,并且它还重新启动了有效的服务,并且在完成上述代码的执行后,zipArchive 问题就消失了。

于 2018-09-02T09:52:24.143 回答
5

对于 PHP 7.x

sudo apt-get install php-zip

对于 PHP 5.x

sudo apt-get install php5.x-zip
// (for example sudo apt-get install php5.6-zip)

然后重启Apache服务器

sudo service apache2 restart
于 2019-12-06T05:32:49.917 回答
5

这有效

apt-get install php7.0-zip

并且无需php7.0-fpm手动重启。

解包php7.0-zip( 7.0.16-4+deb.sury.org~trusty+1) ... ( )
的处理触发器...停止/等待启动/运行,进程 1572停止/等待启动/运行,进程 1777 设置( ) ... 区域设置:无法设置为默认区域设置:没有这样的文件或目录 php7.0-fpm7.0.11-1+deb.sury.org~trusty+1
php7.0-fpm
php7.0-fpm
php7.0-fpm
php7.0-fpm
php7.0-zip7.0.16-4+deb.sury.org~trusty+1
LC_ALL

/etc/php/7.0/mods-available/zip.ini使用新版本创建配置文件( )
的处理触发器...停止/等待启动/运行,进程 2354停止/等待启动/运行,进程 2397 php7.0-fpm7.0.11-1+deb.sury.org~trusty+1
php7.0-fpm
php7.0-fpm
php7.0-fpm
php7.0-fpm

于 2017-03-13T19:22:20.373 回答
4

对于 Remi 上的 Centos 7 和 PHP 7.3

搜索 zip 扩展名:

$ yum search php73 | grep zip
php73-php-pecl-zip.x86_64 : A ZIP archive management extension

扩展名是php73-php-pecl-zip.x86_64。要将其安装在运行单一版本 PHP 的服务器中,请删除前缀 php73:

$ sudo yum --enablerepo=remi-php73 install php-pecl-zip #for server running single PHP7.3 version
$ #sudo yum --enablerepo=remi-php73 install php73-php-pecl-zip # for server running multiple PHP versions

重启 PHP:

$ sudo systemctl restart php-fpm

检查已安装的 PHP 扩展:

$ php -m
[PHP Modules]
apcu
bcmath
bz2
...
zip
zlib
于 2020-01-07T03:51:02.053 回答
3

PHP 5.2.0 及更高版本

Linux 系统

为了使用这些函数,您必须使用 --enable-zip 配置选项编译带有 zip 支持的 PHP。

视窗

Windows 用户需要在 php.ini 中启用 php_zip.dll 才能使用这些功能。

于 2013-07-01T11:39:49.307 回答
3

在 App Engine 标准环境中部署 wordpress 时,我在 GCP 上遇到了这个问题。这解决了它:

sudo apt-get install php7.2-zip
于 2019-10-18T03:55:01.863 回答
2

对于 PHP 7.4 > 默认情况下不再存在 ZipArchive,您需要安装和配置它。

我强烈建议使用一个你可以在你的项目中包含的库——比如https://github.com/zanysoft/laravel-zip 这个库只是原生 ZipArchive 的包装器

于 2021-09-15T08:13:31.867 回答
2

对我来说工作,首先审查

   php -m
   php -version

稍后安装扩展

apt-get update 
apt-get install php7.2-zip
systemctl restart apache2
于 2020-10-14T22:01:41.833 回答
1

您需要检查 PHP 版本

如果php版本是5.6,则需要安装php5.7-zip

sudo apt-get install php5.6-zip

接着

sudo service apache2 restart

希望能帮助到你

于 2020-05-12T05:16:32.887 回答
1

如果您在使用 Docker 映像时遇到此错误并且您正在正确调用该类,或者该错误来自最新的库,则该zip模块可能已丢失。

假设我们使用docker-compose,我们可以通过例如运行来确认它丢失docker-compose run php php -m并看到它zip没有列出。

要将其安装在您的映像中,请修改您的Dockerfile,使其与此示例相同。

FROM php:7.3-apache 

RUN set -eux \
    && apt-get update \
    && apt-get install -y libzip-dev zlib1g-dev \
    && docker-php-ext-install zip

然后重建图像,docker-compose build php你就可以开始了。

于 2020-12-09T08:43:14.950 回答
1

对于基于 CentOS 的服务器使用

yum install php-pecl-zip.x86_64

通过运行启用它:echo "extension=zip.so" >> /etc/php.d/zip.ini

于 2020-01-07T11:10:14.403 回答
0

尝试写\ZIPARCHIVE而不是ZIPARCHIVE.

于 2020-02-09T12:27:20.163 回答
0

我有同样的问题,它已经使用两个命令行解决了:

sudo apt install php-zip

然后重启你的网络服务器,对于 Apache

sudo service apache2 restart

于 2019-03-11T13:08:14.873 回答
0

命名空间

如果在添加后遇到此问题,namespace您可以使用global命名空间(反斜杠\):

$zip = new \ZipArchive;
于 2021-06-18T22:02:00.700 回答
-13

1)你应该require你的文件与ZipArchive文件。

require 'path/to/file/ZipArchive.php';

2)或使用__autoload类的方法。在 PHP 5 中,__autoload() 是一个很棒的方法。

function __autoload($class_name) {
    require_once $class_name . '.php';
}

$obj  = new MyClass1(); // creating an object without require.

http://www.php.net/manual/en/language.oop5.autoload.php

于 2010-10-06T12:52:51.660 回答