Cita:
Iniciado por pateketrueke ¿Ese es el código completo?
Porque es posible que exista un salto de linea o espacio antes del primer <?php que no muestras, o bien, necesitas usar exit al terminar de usar readfile().
El código completo sería este:
Código PHP:
<?php
// Nombre de la ruta del cual queremos hacer el backup
$rootPath = realpath('/home/XXXX/public_html');
// Creamos una variable de tipo Zip
$zip = new ZipArchive();
//Guardamos dentro de una variable la fecha y la hora actual
$date = date("d-m-Y H:i:s");
//Abrimos el archivo Zip para añadir el contenido
$zip->open($date . ".zip", ZipArchive::CREATE | ZipArchive::OVERWRITE);
//Navegamos por los directorios recursivamente y añadimos las carpetas y los archivos al zip creado
$files = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($rootPath),
RecursiveIteratorIterator::LEAVES_ONLY
);
foreach ($files as $name => $file)
{
if (!$file->isDir())
{
$filePath = $file->getRealPath();
$relativePath = substr($filePath, strlen($rootPath) + 1);
$zip->addFile($filePath, $relativePath);
}
}
// Finalizamos de crear el archivo zip
$zip->close();
// Definimos el nombre de archivo a descargar.
$filename = $date . ".zip";
// Descargamos el archivo creado
if (file_exists($file)) {
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($filename));
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($filename));
readfile($filename);
}
//Movemos el archivo a la nueva ubicacion
rename ($rootPath . "/" . $date . ".zip","/home/XXXX/Copias" . "/" . $date . ".zip");
Lo he probado en mi servidor de produccion y lo hace perfectamente (es solo una pagina de html con una cuenta atras, con las librerias de javascript y los css). Con este no tengo problemas, pero cuando lo paso a un servidor con una pagina de wordpress, me da error al descomprimir el archivo que se descarga automaticamente, pero si descargo el archivo creado via FTP, no me da el error.