ข้อผิดพลาดร้ายแรง: ไม่พบคลาส 'ZipArchive'


181

ฉันมีปัญหาที่ฉันติดตั้ง 'Archive_Zip 0.1.1' บนเซิร์ฟเวอร์ Linux แต่เมื่อฉันพยายามเรียกใช้สคริปต์เพื่อสร้างไฟล์ 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ไฟล์ไปยังโฟลเดอร์ที่สคริปต์อยู่ แต่ใช้งานไม่ได้


7
ในการใช้ Ubuntusudo apt-get install php7.2-zip
Eric Korolev

1
@EricKorolev ที่ให้การE: Unable to locate package php7.2-zip E: Couldn't find any package by regex 'php7.2-zip'ใช้งาน Ubuntu 14.04 กับ php 7.2
Muhammad Omer Aslam

1
ใน Debian 10 apt-get install php-zipก็เพียง
aexl

คุณสามารถดูโพสต์นี้: stackoverflow.com/a/60482998/4806585
VishalParkash

คำตอบ:


207

สำหรับZipArchiveคลาสที่มีอยู่ PHP จะต้องติดตั้งส่วนขยาย zip

ดูหน้านี้สำหรับคำแนะนำในการติดตั้ง (ทั้ง Linux และ Windows)


1
เป็นไปได้ว่าฉันไม่สามารถเข้าใจสิ่งที่ฉันทำ ฉันใช้ตัวอย่างที่ให้ไว้ในหมึกที่คุณเตรียมไว้เพื่อการศึกษาและทำสคริปต์ให้สมบูรณ์ มันทำงานได้ดีบนพีซีของฉัน (localhost) และไม่ได้อยู่ในเซิร์ฟเวอร์ โปรดแนะนำสำหรับมัน
Parag Chaure

49
บนเซิร์ฟเวอร์ Ubuntu โดยใช้ apt-getsudo apt-get install php7.0-zip
Luddig

9
วิธีแก้ปัญหาง่าย ๆ : sudo apt-get install php7.0-zip. จากนั้นแก้ไขไฟล์/etc/php/7.0/cli/php.ini(ในส่วน "ส่วนขยายแบบไดนามิก" ให้เพิ่มบรรทัดextension=zip.so) สิ่งนี้ควรแก้ปัญหา
JonyD

21
สำหรับ Dockerdocker-php-ext-install zip
David Riccitelli

11
ดังที่ @Luddig บนเซิร์ฟเวอร์อูบุนตูหลังจากsudo apt-get install php7.0-zipคุณจะต้องรีสตาร์ทเซิร์ฟเวอร์ apachesudo systemctl restart apache2
hashmi

82

ใน Amazon ec2 กับ Ubuntu + nginx + php7 ฉันมีปัญหาเดียวกันแก้ไขโดยใช้:

sudo apt-get install php7.0-zip


หลังจาก apt-get install php7.0-xsl มีปัญหา ... ไม่ต้องกังวลแค่ apt-get install php7.0-zip เพื่อแก้ปัญหา
bortunac

sudo apt-get install php7.1-zipสำหรับ Ubuntu / php7.1
Nino Škopac

สิ่งนี้ไม่ได้ผลphp 7.2และมักจะพูดว่าE: Unable to locate package php7.2-zip E: Couldn't find any package by regex 'php7.2-zip'
Muhammad Omer Aslam

39

บนเดสก์ท็อป Ubuntu ฉันต้องทำ

sudo apt-get install php5.6-zip

สิ่งนี้ติดตั้งห้องสมุด แต่ฉันยังคงได้รับข้อผิดพลาดเดียวกันดังนั้นฉันจึงต้องเริ่ม apache ใหม่โดยใช้:

sudo service apache2 restart

และมันก็ใช้งานได้


1
Apache เริ่มต้นใหม่ทำเมื่อรวมกับโซลูชันของ @
pekka

18

ก่อนอื่นวิธีแก้ปัญหาสำหรับเซิร์ฟเวอร์ระยะไกล:

หากคุณใช้cpanelคุณอาจติดตั้งส่วนขยาย zip แต่ไม่เปิดใช้งาน คุณต้องเปิดใช้งานมัน สำหรับกรณีนี้คุณต้องไปที่CPanel> ภายในส่วนซอฟต์แวร์> คลิกที่ PHP รุ่น จากนั้นค้นหาซิปและตรวจสอบ ตอนนี้บันทึก

คุณควรเห็นเช่นภาพ ป้อนคำอธิบายรูปภาพที่นี่

รีเฟรชหน้า ข้อผิดพลาดควรหายไป

หมายเหตุ: หากคุณไม่พบกรุณาติดต่อผู้ให้บริการเซิร์ฟเวอร์ พวกเขาจะติดตั้งให้คุณ


สิ่งนี้ใช้ได้สำหรับฉัน ฉันใช้เครื่องมือสร้างเทมเพลตและมันจะไม่ส่งออก ฉันตรวจสอบช่องทำเครื่องหมาย zip, บันทึกและ voila ขอบคุณ Kaylan
Hblegg

16

ฉันไม่เห็นมันที่นี่ดังนั้นฉันต้องการเพิ่มใน Debian / Ubuntu คุณอาจต้องเปิดใช้งานส่วนขยายหลังจากติดตั้งแพคเกจที่เกี่ยวข้อง ดังนั้น:

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

2
ติดตั้งphp7.0-zipสำหรับ PHP 7
AnthonyB

อย่าลืมรีสตาร์ท APACHE !!
zzapper

1
ติดตั้ง php7.1-zip สำหรับ PHP 7.1, php7.2-zip สำหรับ PHP 7.2
นีโอ

6

หากคุณมี WHM ให้ใช้งานง่ายกว่า

เข้าสู่ระบบเพื่อWHM

ไปที่EasyApache 4 (หรือเวอร์ชั่นที่คุณมี) ภายใต้แท็บซอฟต์แวร์

ภายใต้แพคเกจติดตั้งในปัจจุบันคลิกกำหนดเอง

ไปที่PHP Extensionsในประเภทการค้นหา " zip " ( ไม่มีเครื่องหมายคำพูด )

คุณควรเห็น 3 โมดูล

ตรวจสอบทั้งหมดของพวกเขา

คลิกปุ่มสีน้ำเงินสองสามครั้งเพื่อเสร็จสิ้นกระบวนการ

สิ่งนี้ใช้ได้สำหรับฉัน โชคดีที่ฉันมี WHM


5

สิ่งนี้ใช้ได้ผล

apt-get install php7.0-zip

และไม่จำเป็นต้องรีสตาร์ทphp7.0-fpmด้วยตนเอง

กำลังแกะกล่องบรรจุphp7.0-zip( 7.0.16-4+deb.sury.org~trusty+1) ... กำลัง
ประมวลผลทริกเกอร์สำหรับphp7.0-fpm( 7.0.11-1+deb.sury.org~trusty+1) ...
php7.0-fpmหยุด / รอ
php7.0-fpmเริ่ม / เรียกใช้กระบวนการ 1572
php7.0-fpmหยุด / รอ
php7.0-fpmเริ่ม / ทำงานประมวลผล 1777 กำลัง
ตั้งค่าphp7.0-zip( 7.0.16-4+deb.sury.org~trusty+1) ...
ตำแหน่งที่ตั้ง: ไม่สามารถตั้งLC_ALLค่าเป็นตำแหน่งที่ตั้งเริ่มต้น: ไม่มีไฟล์ดังกล่าว หรือไดเรกทอรี

การสร้างไฟล์กำหนดค่า/etc/php/7.0/mods-available/zip.iniด้วยเวอร์ชันใหม่
การประมวลผลทริกเกอร์สำหรับphp7.0-fpm( 7.0.11-1+deb.sury.org~trusty+1) ...
php7.0-fpmหยุด / รอ
php7.0-fpmเริ่ม / เรียกใช้กระบวนการ 2354
php7.0-fpmหยุด / รอ
php7.0-fpmเริ่ม / เรียกใช้กระบวนการ 2397


4

คุณต้องคอมไพล์ PHP ด้วยการสนับสนุน zip คู่มือบอกว่าต่อไปนี้:

ในการใช้งานฟังก์ชั่นเหล่านี้คุณต้องรวบรวม PHP ด้วยการรองรับ zip โดยใช้ตัวเลือก --enable-zip

ไม่เพียงพอที่จะติดตั้งส่วนขยายที่ถูกต้องบนเซิร์ฟเวอร์ ดูที่ลิงค์คำแนะนำการติดตั้ง Pekka โพสต์ก่อนหน้านี้ คำตอบของฉันเป็นเพียงการชี้แจงของเขา


ใช่ แต่ที่ผมควรจะเรียกใช้คำสั่งนี้บนเซิร์ฟเวอร์เพื่อให้ PHP วิ่งด้วยการสนับสนุนซิป
Parag Chaure

เป็นเซิร์ฟเวอร์ที่คุณควบคุมหรือไม่ ถ้าเป็นเช่นนั้นฉันเชื่อว่ามันเป็นส่วนหนึ่งของคำสั่ง make เมื่อติดตั้ง PHP หากไม่ใช่เซิร์ฟเวอร์ที่คุณควบคุมดังนั้นตัวเลือกเดียวสำหรับคุณคือพยายามให้ผู้ดูแลระบบ sys ทำ ขออภัยฉันไม่แม่นยำมากขึ้น - ฉันไม่เคยติดตั้ง PHP บนเซิร์ฟเวอร์ linux ตั้งแต่เริ่มต้น
Jeremy

4

ฉันมีปัญหาเดียวกันกับเซิร์ฟเวอร์ที่ติดตั้งCentOSและcPanel ฉันติดตั้งแพ็คเกจ zipArchive ผ่าน cPanel และไม่ทำงานตามที่คาดไว้ หลังจากลองใช้การแก้ไขจำนวนมากแนะนำให้ทุกคนและทุกที่เพียงทำงานด้านล่างสำหรับฉัน

ขั้นแรกให้ค้นหาชื่อสำหรับแพ็คเกจที่ถูกต้องด้วยคำสั่งด้านล่าง

yum search zip |grep -i php

จากนั้นใช้รหัสด้านล่าง

yum install your_zip_package_name_with_php_version

ในกรณีของฉันรหัสที่ถูกต้องในการติดตั้ง zipArchive คือ

yum install php-pecl-zip.x86_64

ฉันมีทางออกจากลิงค์นี้ ฉันจะ inslatt zipArchive บน PHP 7.2 ด้วย CentOS 7 ได้อย่างไร

และการติดตั้งนี้ก็เปิดใช้งานแพคเกจนั้นด้วยและมันก็เริ่มบริการที่มีผลและหลังจากการดำเนินการของรหัส zipArchive เสร็จสมบูรณ์แล้ว


4

Centos 6

yum install php-pecl-zip

service httpd restart

1
ขอบคุณ. ฉันติดตั้ง php-pecl-zip แล้ว แต่ไม่มีการรีสตาร์ท httpd ในที่สุดก็พบคำตอบของคุณ!
Ngoc Nam

4

สำหรับ 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

3

PHP 5.2.0 และใหม่กว่า

ระบบลีนุกซ์

ในการใช้งานฟังก์ชั่นเหล่านี้คุณจะต้องคอมไพล์ PHP ด้วยการรองรับ zip โดยใช้ตัวเลือก --enable-zip

ของ windows

ผู้ใช้ Windows จำเป็นต้องเปิดใช้งาน php_zip.dll ภายใน php.ini เพื่อใช้ฟังก์ชั่นเหล่านี้


3

ฉันประสบปัญหานี้ใน GCP ขณะปรับใช้ WordPress ในสภาพแวดล้อม App Engine Standard วิธีนี้แก้ไขได้:

sudo apt-get install php7.2-zip

1

สำหรับ Centos 7 และ PHP 7.3 บน Remi

ค้นหาส่วนขยาย 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

1

สำหรับเซิร์ฟเวอร์ที่ใช้ CentOS

yum install php-pecl-zip.x86_64

เปิดใช้งานโดยการเรียกใช้: echo "extension=zip.so" >> /etc/php.d/zip.ini


0

ฉันมีปัญหาเดียวกันและแก้ไขได้โดยใช้สองบรรทัดคำสั่ง:

sudo apt install php-zip

จากนั้นรีบูทเว็บเซิร์ฟเวอร์ของคุณสำหรับ Apache

sudo service apache2 restart



0

คุณต้องตรวจสอบเวอร์ชั่น PHP

หากรุ่น php คือ 5.6 คุณจะต้องติดตั้ง php5.7-zip

sudo apt-get install php5.6-zip

แล้ว

sudo service apache2 restart

หวังว่ามันจะช่วย


-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


ฉันจะรวมหรือต้องการไฟล์ ZipArchive ได้อย่างไร
Parag Chaure
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.