2010-10-06 169 views
85

我有一個問題,我在Linux服務器上安裝'Archive_Zip 0.1.1',但是當我嘗試運行腳本來創建zip文件時,它給出了致命錯誤致命錯誤:類'ZipArchive'找不到

Fatal error: Class ZipArchive not found in ...

,我把代碼

$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文件放到腳本所在的文件夾中,但它不起作用。

回答

106

對於ZipArchive class爲存在,PHP需要安裝的zip extension

this page安裝說明(Linux和Windows)。

+0

我已經在服務器 – 2010-10-06 13:01:43

+0

@parag上安裝了Archive_Tar和File_Archive擴展,那麼這些擴展不是正確的擴展名,是嗎?這裏有問題的這裏似乎被命名爲「zip」 – 2010-10-06 13:05:30

+0

我在google上搜索並將這些擴展名放到服務器上。這是我第一次使用ziparchive或創建zip文件,所以我不確定它們是否是正確的擴展名。 – 2010-10-06 13:13:21

-10

1)你應該ZipArchive文件require您的文件。

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

+0

我應該如何包含或需要ZipArchive文件? – 2010-10-06 13:10:56

+0

查看我的更改。 – pltvs 2010-10-06 13:20:24

+0

這不是重點。OP缺少一個PHP擴展 – 2010-10-06 13:26:04

3

您還需要編譯PHP的ZIP支持。該手冊說明如下:

In order to use these functions you must compile PHP with zip support by using the --enable-zip configure option.

僅僅在服務器上安裝正確的擴展是不夠的。看看Pekka之前發佈的安裝說明鏈接。我的回答只是對他的澄清。

+0

是的,但是我應該在服務器上運行這個命令,以便php以zip支持運行 – 2010-10-06 13:15:41

+0

它是一個您控制的服務器嗎?如果是這樣,我相信它是安裝PHP時的make命令的一部分。如果它不是您控制的服務器,那麼唯一的選擇是嘗試讓系統管理員執行此操作。對不起,我不能更精確 - 我從來沒有從頭開始在Linux服務器上安裝PHP。 – Jeremy 2010-10-06 13:22:42

3

PHP 5.2.0以後

Linux系統

爲了使用--enable-ZIP配置選項來使用這些功能,您必須在編譯PHP的ZIP支持。

的Windows

Windows用戶需要啓用php_zip.dll php.ini中才能使用這些功能。

59

在Amazon EC2上使用Ubuntu + nginx的+ PHP7,我有同樣的問題,用解決了這個問題:

sudo apt-get install php7.0-zip

+0

apt-get安裝後php7.0-xsl得到了問題...不要擔心只是apt-get安裝php7.0-zip解決 – bortunac 2016-06-25 16:18:39

+1

謝謝.... :)這工作對我來說,拯救了我的一天! !!!! – Chaitanya 2017-01-09 19:28:17

+0

'sudo apt-get install php7.1-zip' for Ubuntu/php7.1 – 2017-02-06 13:23:15

22

在Ubuntu桌面,我不得不這樣做。

sudo apt-get install php5.6-zip 

此安裝庫,但我還是不停地得到同樣的錯誤,所以我不得不重新啓動Apache使用:

sudo service apache2 restart 

和它的工作。

+0

重啓apache與@ pekka的解決方案結合使用 – gthuo 2018-02-22 08:14:44

4

這個工作

apt-get install php7.0-zip 

,無需手動重新啓動php7.0-fpm

Unpacking php7.0-zip (7.0.16-4+deb.sury.org~trusty+1) ...
Processing triggers for php7.0-fpm (7.0.11-1+deb.sury.org~trusty+1) ...
php7.0-fpm stop/waiting
php7.0-fpm start/running, process 1572
php7.0-fpm stop/waiting
php7.0-fpm start/running, process 1777
Setting up php7.0-zip (7.0.16-4+deb.sury.org~trusty+1) ...
locale: Cannot set LC_ALL to default locale: No such file or directory

Creating config file /etc/php/7.0/mods-available/zip.ini with new version
Processing triggers for php7.0-fpm (7.0.11-1+deb.sury.org~trusty+1) ...
php7.0-fpm stop/waiting
php7.0-fpm start/running, process 2354
php7.0-fpm stop/waiting
php7.0-fpm start/running, process 2397

6

我沒有看到它在這裏,所以我想補充一點,在Debian/Ubuntu的,你可能需要使安裝相關包裝後的延伸。所以:

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

爲PHP 7安裝'php7.0-zip'。 – AnthonyB 2017-10-20 12:40:26

4

首先,遠程服務器解決方案:

如果您正在使用的cPanel您還可以安裝zip擴展,但不激活。你需要激活它。對於這種情況,你需要去cpanel>內部軟件部分>點擊PHP版本。然後找到zip並檢查它。現在保存。

您應該看到圖像。 enter image description here

刷新頁面。錯誤應該消失。

注意:如果找不到,請聯繫服務器提供商。他們會爲你安裝。

+0

Thanks Kalyan,working令人驚訝的。乾杯。 – 2017-12-27 08:53:36