Necesito una solución que funcionaría en los sitios web Azure (IIS) y tenía problemas con la creación de nuevos archivos en el servidor usando métodos de otras respuestas. La solución que funcionó para mí fue usar la pequeña biblioteca TbsZip para compresión, que no requiere escribir archivos en ningún lugar del servidor; simplemente se devuelve directamente a través de HTTP.
Este hilo es viejo, pero este enfoque podría ser un poco más genérico y respuesta completa, por lo que publicar el código como alternativa:
// Compress all files in current directory and return via HTTP as a ZIP file
// by buli, 2013 (http://buli.waw.pl)
// requires TbsZip library from http://www.tinybutstrong.com
include_once('tbszip.php'); // load the TbsZip library
$zip = new clsTbsZip(); // instantiate the class
$zip->CreateNew(); // create a virtual new zip archive
// iterate through files, skipping directories
$objects = new RecursiveIteratorIterator(new RecursiveDirectoryIterator('.'));
foreach($objects as $name => $object)
{
$n = str_replace("/", "\\", substr($name, 2)); // path format
$zip->FileAdd($n, $n, TBSZIP_FILE); // add fileto zip archive
}
$archiveName = "backup_".date('m-d-Y H:i:s').".zip"; // name of the returned file
$zip->Flush(TBSZIP_DOWNLOAD, $archiveName); // flush the result as an HTTP download
Y aquí está toda la article on my blog.
Parece una limitación extraña. –
Pero no del todo en común, muchos hosts simplemente bloquean el uso por completo en lugar de molestar a los usuarios. – UnkwnTech
Correcto, pero es una tontería, dado el poder de PHP para interactuar con el sistema de archivos. –