致命错误:找不到类“ZipArchive”

时间:2010-10-06 12:47:02

标签: php zip ziparchive

我有一个问题,我在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文件放到脚本所在的文件夹中,但它不起作用。

20 个答案:

答案 0 :(得分:169)

要使ZipArchive class存在,PHP需要安装zip extension

有关安装说明(Linux和Windows),请参阅this page

答案 1 :(得分:75)

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

<FilesMatch \.php$> SetHandler x-httpd-php7.0 </FilesMatch> # BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> # END WordPress

答案 2 :(得分:33)

在ubuntu桌面上,我必须这样做。

sudo apt-get install php5.6-zip

这安装了库,但我仍然遇到同样的错误,所以我不得不重启apache:

sudo service apache2 restart

它有效。

答案 3 :(得分:13)

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

sudo apt-get install php-zip
sudo phpenmod zip
sudo service apache2 restart

答案 4 :(得分:8)

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

如果您使用 cpanel ,则可能已安装zip扩展程序但未激活。你需要激活它。在这种情况下,您需要转到 cpanel&gt; <内部软件部分>点击PHP版。然后找 zip 并进行检查。现在保存。

你应该看到图像。 enter image description here

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

注意:如果找不到,请联系服务提供商。他们会为你安装。

答案 5 :(得分:5)

这有效

apt-get install php7.0-zip

,无需手动重启php7.0-fpm

  

开箱php7.0-zip7.0.16-4+deb.sury.org~trusty+1)...
  处理php7.0-fpm7.0.11-1+deb.sury.org~trusty+1)...的触发器   php7.0-fpm停止/等待
  php7.0-fpm开始/运行,流程1572   php7.0-fpm停止/等待
  php7.0-fpm开始/运行,流程1777年   设置php7.0-zip7.0.16-4+deb.sury.org~trusty+1)...
  locale:无法将LC_ALL设置为默认语言环境:没有此类文件或目录

     

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

答案 6 :(得分:4)

您还需要使用zip支持编译PHP。手册说明如下:

  

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

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

答案 7 :(得分:3)

PHP 5.2.0及更高版本

Linux系统

要使用这些函数,您必须使用--enable-zip configure选项编译带zip支持的PHP。

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

答案 8 :(得分:2)

如果您有WHM可用,则更容易。

登录 WHM

转到软件标签下的 EasyApache 4(或您拥有的任何版本)。

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

转到 PHP扩展程序,搜索类型为“ zip ”(不带引号),

你应该看到3个模块

检查所有这些,

点击蓝色按钮几次以完成此过程。

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

答案 9 :(得分:2)

我在安装 CentOS cPanel 时遇到了相同的问题。我通过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

我从此链接获得了解决方案。 How can I inslatt zipArchive on PHP 7.2 with CentOS 7?

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

答案 10 :(得分:2)

Centos 6

yum install php-pecl-zip

service httpd restart

答案 11 :(得分:1)

您需要检查PHP版本

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

sudo apt-get install php5.6-zip

然后

sudo service apache2 restart

希望有帮助

答案 12 :(得分:0)

命名空间

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

$zip = new \ZipArchive;

答案 13 :(得分:0)

如果在使用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重建图像,您就很好了。

答案 14 :(得分:0)

对于我的工作,请先审核

   php -m
   php -version

稍后安装扩展程序

apt-get update 
apt-get install php7.2-zip
systemctl restart apache2

答案 15 :(得分:0)

尝试写\ZIPARCHIVE而不是ZIPARCHIVE

答案 16 :(得分:0)

对于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

答案 17 :(得分:0)

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

sudo apt-get install php7.2-zip

答案 18 :(得分:0)

我遇到了同样的问题,并且使用两个命令行解决了该问题:

key length: 32(key to be wrapped) swkKey length: 32(key used to wrap) wrappedAppKey size: 48(final wrapped key output).

然后为Apache重新启动Web服务器

sudo apt install php-zip

答案 19 :(得分:-10)

1)您应该使用require文件ZipArchive您的文件。

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

2)或使用__autoload类方法。 在PHP 5中,它是一个greate方法__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