Foros del Web » Programando para Internet » PHP »

Creo un zip, pero se descarga corrupto

Estas en el tema de Creo un zip, pero se descarga corrupto en el foro de PHP en Foros del Web. Hola: Resulta que he hecho un script de php para hacer backups, que coge todo lo que esta en la carpeta public_html o www, y ...
  #1 (permalink)  
Antiguo 04/08/2015, 08:56
 
Fecha de Ingreso: abril-2015
Ubicación: Barcelona
Mensajes: 28
Antigüedad: 9 años, 7 meses
Puntos: 2
Creo un zip, pero se descarga corrupto

Hola:
Resulta que he hecho un script de php para hacer backups, que coge todo lo que esta en la carpeta public_html o www, y lo comprime en un Zip.

Hasta aqui bien, el problema es que hago que se descargue automáticamente, pero cuando lo voy a abrir, no lo reconoce. Pero si me conecta via FTP y lo descargo si que lo puedo abrir. En fin que no consigo saber que es.

El backup se hace en el mismo directorio donde esta el script.

A ver si vosotros encontráis el fallo, porque yo no veo ninguno, y me vuelvo loco.

La parte de código que hace que se descargue es:

Código PHP:
$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);

Gracias
  #2 (permalink)  
Antiguo 04/08/2015, 09:13
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: Creo un zip, pero se descarga corrupto

¿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().
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 04/08/2015, 10:35
 
Fecha de Ingreso: abril-2015
Ubicación: Barcelona
Mensajes: 28
Antigüedad: 9 años, 7 meses
Puntos: 2
Respuesta: Creo un zip, pero se descarga corrupto

Cita:
Iniciado por pateketrueke Ver Mensaje
¿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($filePathstrlen($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.
  #4 (permalink)  
Antiguo 04/08/2015, 10:37
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: Creo un zip, pero se descarga corrupto

Cita:
pero cuando lo paso a un servidor con una pagina de wordpress
Pues razones puede haber muchas, si ya funciona tu código ¿qué estaría mal con él?

No podemos adivinar, ni ejecutarlo mentalmente para entender.

¿Qué tal si revisas los logs de error en busca de algo más?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 06/08/2015, 02:13
 
Fecha de Ingreso: abril-2015
Ubicación: Barcelona
Mensajes: 28
Antigüedad: 9 años, 7 meses
Puntos: 2
Respuesta: Creo un zip, pero se descarga corrupto

He revisado los logs, linea por linea y no he encontrado nada extraño.

Pues me tocara hacer de Sherlock Holmes.

Gracias Igualmente.

Etiquetas: html, zip
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:28.