2011-03-12 22 views
5

Estoy tratando de crear un script zip basado en lo que he encontrado here pero parece que estoy obteniendo un error fatal: Error de clase 'ZipArchive' no encontrado en el nuevo ZipArchive (); función.PHP Zip Creando clase ZipArchive no encontrado Error

Investigando esto, parece que esto suele deberse a la forma en que se compila PHP. Tengo una cuenta de alojamiento compartida, así que no configuré nada de esto ... y asumo que no puedo hacer ningún cambio en la compilación. Como curiosidad me echó un vistazo en mi phpinfo() y me encontré con algunas cosas que parecían asociados:

PHP versión 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 

No estoy seguro de si entirly nada de esto significa que yo tener la capacidad de crear cremalleras. Para más información (aunque no creo que sea revivido) aquí está mi script hasta ahora ... esto no ha sido probado, ya que no puedo pasar este error de Clase no encontrada.

$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); 

Así que mi pregunta (s) realmente son:

  1. ¿Estoy haciendo algo en mi script para causar este error?
  2. ¿Alguna de esas cosas de mi phpinfo() significa que debería ser capaz de crear archivos zip, ... si no es lo que debería estar buscando allí, eso me avisará si tengo la capacidad.
  3. Parece que este ZLib es un poco blando de la biblioteca, pero no tengo idea si hace lo que yo quiero que haga, o incluso cómo usarlo ... esto es un presentimiento, pero si me puede ayudar a crear archivos zip ¿alguien me puede indicar la dirección correcta de cómo usarlo?

Gracias de antemano. Dan

Respuesta

3

ZipArchive aparentemente no está compilado en PHP por defecto. Necesitas recompilarlo con la opción '--with-zip =' o simplemente instalarlo a través de PECL.

Aquí está la página del manual que explica los diferentes métodos:

http://www.php.net/manual/en/zip.installation.php

+2

supongo que aunque ya estoy en un alojamiento compartido cuenta, no puedo hacer esto? El proveedor de alojamiento web (en mi caso, streamline.net) es el único que puede volver a compilar las cosas de php/add en ... ¿o hay algo que pueda hacer? –

+4

Si su proveedor de hosting no rehace su compilación PHP con zip, entonces la biblioteca PCLZip puede ser una alternativa –

+0

@ Mark Baker Gracias Mark, he estado buscando en PCLZip esta mañana y ¡funciona perfectamente! –

1

Mientras zlib es una biblioteca de compresión importante, parece que se está perdiendo the zip extension itself. Parece que obtuvo su información de phpinfo - busque las palabras exactas "extensión zip". Si no puede encontrarlos, no los tiene instalados y, por lo tanto, no puede usar las funciones y métodos proporcionados por este.

0

Puede probar dl("zip.so"); como último recurso. Pero esa extensión rara vez se construye como un módulo externo. Es posible que pueda encontrarlo descargable en algún lugar, o incluso compilarlo a mano desde las fuentes PHP o http://pecl.php.net/package/zip usando pecl build

De lo contrario, tendrá que buscar una alternativa. http://pear.php.net/package/Archive_Zip viene a la mente.

0

Si tiene actualizar la versión de PHP o zip extension no está allí

Así que hay que instalarlo.

1) Abrir el terminal

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

3) sudo service apache2 restart

Cuestiones relacionadas