Solución:
Tuve este mismo problema y mi solución fue similar a la respuesta correcta en este hilo. Cuando coloca un archivo en el archivo, no puede tener archivos absolutos (archivos que comienzan con una barra) o, de lo contrario, no se abrirá en Windows por alguna razón.
Así que lo hizo funcionar no porque él (Jesse Bunch, la respuesta seleccionada en el momento de escribir este artículo) eliminó la carpeta que lo contenía, sino porque eliminó la barra inicial.
Solucioné el problema cambiando
$zip->addFile($file, $file); // $file is something like /path/to/file.png
para
// we make file relative by removing beginning slash so it will open in Windows
$zip->addFile($file, ltrim($file, "https://foroayuda.es/"));
¡y luego pudo abrirse en Windows!
Esa es probablemente la misma razón por la que pclzip (la respuesta de Plahcinski) funciona. Apuesto a que elimina automáticamente la barra inicial.
No me habría dado cuenta de esto sin un comentario en particular sobre PHP ZipArchive::addFile
página de documentación.
Recientemente tuve un problema similar al que describiste. Encontré ZipArchive inestable en el mejor de los casos.
Resolví mis problemas con esta simple biblioteca.
http://www.phpconcept.net/pclzip
include_once('libs/pclzip.lib.php');
…
function zip($source, $destination){
$zipfile = new PclZip($destination);
$v_list = $zipfile->create($source, '', $source); }
$ fuente = carpeta que quería comprimir $ destino = ubicación del archivo zip
Pasé 2 días buscando ZipArchive y luego resolví todos los problemas con PCLZip en 5 minutos.
Espero que esto le ayude a usted y a cualquier otra persona que tenga este problema (ya que se encuentra cerca del principal resultado de Google sobre el problema).
Todas estas sugerencias pueden ayudarte, pero en mi caso necesito escribir un ob_clean (); antes del primer encabezado (”); porque algún archivo que incluyo antes de imprimir algunos caracteres ese archivo zip roto en Windows.
$zip=new ZipArchive();
$zip->open($filename, ZIPARCHIVE::CREATE);
$zip->addFile($file_to_attach,$real_file_name_to_attach);
$zip->close();
ob_clean();
header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past
header('Content-Type: application/x-download');
header('Content-Disposition: attachment; filename="file.zip"');
readfile($filename);
exit;