lib from descargar clase php zip folders
la documentación

from - php creando cremalleras sin ruta a archivos dentro del zip



ziparchive lib php (3)

Estoy tratando de usar php para crear un archivo zip (lo cual hace - tomado de esta página - http://davidwalsh.name/create-zip-php ), sin embargo, dentro del archivo zip están todos los nombres de las carpetas al archivo en sí

¿Es posible tener el archivo dentro del archivo zip sin todas las carpetas?

Aquí está mi código:

function create_zip($files = array(), $destination = '''', $overwrite = true) { if(file_exists($destination) && !$overwrite) { return false; }; $valid_files = array(); if(is_array($files)) { foreach($files as $file) { if(file_exists($file)) { $valid_files[] = $file; }; }; }; if(count($valid_files)) { $zip = new ZipArchive(); if($zip->open($destination,$overwrite ? ZIPARCHIVE::OVERWRITE : ZIPARCHIVE::CREATE) !== true) { return false; }; foreach($valid_files as $file) { $zip->addFile($file,$file); }; $zip->close(); return file_exists($destination); } else { return false; }; }; $files_to_zip = array(''/media/138/file_01.jpg'',''/media/138/file_01.jpg'',''/media/138/file_01.jpg''); $result = create_zip($files_to_zip,''/...full_site_path.../downloads/138/138_files.zip'');


Creo que una mejor opción sería:

$zip->addFile($file,basename($file));

Que simplemente extrae el nombre de archivo de la ruta.


El problema aquí es que $zip->addFile recibe los mismos dos parámetros.

De acuerdo con la documentación :

bool ZipArchive :: addFile (cadena $ nombre de archivo [, cadena $ nombre local ])

nombre del archivo
La ruta al archivo para agregar.

nombre local
nombre local dentro de archivo ZIP.

Esto significa que el primer parámetro es la ruta al archivo real en el sistema de archivos y el segundo es la ruta y el nombre de archivo que el archivo tendrá en el archivo.

Cuando suministre el segundo parámetro, querrá quitarle la ruta al agregarlo al archivo zip. Por ejemplo, en sistemas basados ​​en Unix esto se vería así:

$new_filename = substr($file,strrpos($file,''/'') + 1); $zip->addFile($file,$new_filename);


Este es solo otro método que encontré que funcionó para mí

$zipname = ''file.zip''; $zip = new ZipArchive(); $tmp_file = tempnam(''.'',''''); $zip->open($tmp_file, ZipArchive::CREATE); $download_file = file_get_contents($file); $zip->addFromString(basename($file),$download_file); $zip->close(); header(''Content-disposition: attachment; filename=''.$zipname); header(''Content-type: application/zip''); readfile($tmp_file);