txt lib generar directorio descargar con automaticamente archivos archivo php download zip

lib - php zip



Crea un archivo zip y descárgalo (7)

pero el archivo que recibo del servidor después de la descarga da el tamaño de 226 bytes

Este es el tamaño de un encabezado ZIP. Aparentemente no hay datos en el archivo ZIP descargado. Entonces, ¿puede verificar que los archivos que se agregarán en el archivo ZIP están, de hecho, allí (en relación con la ruta del script PHP de descarga)?

Considere agregar un cheque en addFile también:

foreach($file_names as $file) { $inputFile = $file_path . $file; if (!file_exists($inputFile)) trigger_error("The input file $inputFile does not exist", E_USER_ERROR); if (!is_readable($inputFile)) trigger_error("The input file $inputFile exists, but has wrong permissions or ownership", E_USER_ERROR); if (!$zip->addFile($inputFile, $file)) trigger_error("Could not add $inputFile to ZIP file", E_USER_ERROR); }

El comportamiento observado es consistente con algún problema (error de ruta, problemas de permisos, ...) que impide que los archivos se agreguen al archivo ZIP. Al recibir un archivo ZIP "vacío", el cliente emite un error que hace referencia al directorio central ZIP que falta (el error real es que no hay ningún directorio ni archivos).

Intento descargar 2 archivos creando el archivo zip en el servidor local. El archivo se descarga en formato zip pero cuando intento extraerlo, aparece un error: no se encuentra la firma del final del directorio central. O bien este archivo no es un archivo zip, o constituye un disco de un archivo de varias partes. En este último caso, el directorio central y el archivo comprimido se encontrarán en el (los) último (s) disco (s) de este archivo.

el siguiente código que estoy usando para esto:

<?php $file_names = array(''iMUST Operating Manual V1.3a.pdf'',''iMUST Product Information Sheet.pdf''); //Archive name $archive_file_name=$name.''iMUST_Products.zip''; //Download Files path $file_path=$_SERVER[''DOCUMENT_ROOT''].''/Harshal/files/''; zipFilesAndDownload($file_names,$archive_file_name,$file_path); function zipFilesAndDownload($file_names,$archive_file_name,$file_path) { //echo $file_path;die; $zip = new ZipArchive(); //create the file and throw the error if unsuccessful if ($zip->open($archive_file_name, ZIPARCHIVE::CREATE )!==TRUE) { exit("cannot open <$archive_file_name>/n"); } //add each files of $file_name array to archive foreach($file_names as $files) { $zip->addFile($file_path.$files,$files); //echo $file_path.$files,$files." } $zip->close(); //then send the headers to force download the zip file header("Content-type: application/zip"); header("Content-Disposition: attachment; filename=$archive_file_name"); header("Pragma: no-cache"); header("Expires: 0"); readfile("$archive_file_name"); exit; } ?>

Comprobé los valores de todas las variables que pasan a la función, todo está bien. Por favor, mira esto. Gracias de antemano.


Agregue el encabezado Content-length describe el tamaño del archivo zip en bytes.

header("Content-type: application/zip"); header("Content-Disposition: attachment; filename=$archive_file_name"); header("Content-length: " . filesize($archive_file_name)); header("Pragma: no-cache"); header("Expires: 0"); readfile("$archive_file_name");

También asegúrese de que no haya absolutamente ningún espacio en blanco antes de <? y después ?> . Veo un espacio aquí:

<?php $file_names = array(''iMUST Operating Manual V1.3a.pdf'',''iMUST Product Information Sheet.pdf'');


He experimentado exactamente el mismo problema. En mi caso, la fuente de esto eran los permisos de la carpeta en la que quería crear el archivo zip que estaba todo configurado para solo lectura. Lo cambié para leer y escribir y funcionó.

Si el archivo no se crea en su servidor local cuando ejecuta el script, es probable que tenga el mismo problema que yo.


Me encontré con este problema. Para mí, el problema fue con:

readfile("$archive_file_name");

Se estaba produciendo un error de falta de memoria.

Allowed memory size of 134217728 bytes exhausted (tried to allocate 292982784 bytes)

Pude corregir el problema reemplazando readfile () por lo siguiente:

$handle = fopen($zipPath, "rb"); while (!feof($handle)){ echo fread($handle, 8192); } fclose($handle);

No estoy seguro de si este es su problema o no veo que su archivo tiene solo 1.2 MB. Tal vez esto ayude a alguien más con un problema similar.


// http headers for zip downloads header("Pragma: public"); header("Expires: 0"); header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); header("Cache-Control: public"); header("Content-Description: File Transfer"); header("Content-type: application/octet-stream"); header("Content-Disposition: attachment; filename=/"".$filename."/""); header("Content-Transfer-Encoding: binary"); header("Content-Length: ".filesize($filepath.$filename)); ob_end_flush(); @readfile($filepath.$filename);

Encontré esta solución aquí y me funciona


$zip = new ZipArchive; if ($zip->open(''assets/myzip.zip'', ZipArchive::CREATE)) { $zip->addFile(''folder/bootstrap.js'', ''bootstrap.js''); $zip->addFile(''folder/bootstrap.min.js'', ''bootstrap.min.js''); $zip->close(); echo ''Archive created!''; header(''Content-disposition: attachment; filename=files.zip''); header(''Content-type: application/zip''); readfile($tmp_file); } else { echo ''Failed!''; }


Uno de los errores podría ser que el archivo no se lee como formato ''archivo''. echa un vistazo a ZipArchive sin abrir el archivo - Código de error: 19 . Abra el archivo descargado en el editor de texto, si tiene etiquetas html o declaraciones de depuración al inicio, borre el búfer antes de leer el archivo.

ob_clean(); flush(); readfile("$archive_file_name");