PHP - Problema al crear un archivo zip en php7 usando una consulta mysql

 
Vista:
Imágen de perfil de jose
Val: 17
Ha disminuido su posición en 5 puestos en PHP (en relación al último mes)
Gráfica de PHP

Problema al crear un archivo zip en php7 usando una consulta mysql

Publicado por jose (7 intervenciones) el 25/01/2020 08:46:53
Hola,

Estoy intentando crear un codigo para crear un archivo zip y lo baje usando una query de mysqli.

He intentado diferentes códigos y obtenido diferentes errores. En la última no tengo mensajes de errores, pero no funciona.

El archivo zip se crea bajo el nombre "Renta_J&J.zip", pero vacío. Y en vez bajarlo, se añade a la misma carpeta donde está el archivo php y vacío.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
if (isset($_POST['copy_all'])) {
    $ticket_date_from = $_POST['ticket_date_from'];
    $ticket_date_to = $_POST['ticket_date_to'];
    $zip = new ZipArchive();
    $filename= "Renta_J&J.zip";
 
    $query = "SELECT * FROM recibos WHERE ticket_date BETWEEN '$ticket_date_from' AND '$ticket_date_to'";
    $search_result = filterTable($query);
    $count_rows = mysqli_num_rows($search_result);
    $row = mysqli_fetch_row($search_result);
 
 
 
    if ($zip->open($filename,ZIPARCHIVE::CREATE)===true){
        while($row = mysqli_fetch_array($search_result)){
            $image_dir = $row['image_dir'];
            $dir = "../upload/";
            $image_file = $dir.$image_dir;
            if (file_exists($image_file ) && is_file($image_file )){
            $zip->addfile($image_file, $image_file );
        }
    }
    $zip->close();
 
    }else{
            echo 'Error '.$filename;
    }
}


Esta es la sentencia que utilizo para llamar al código php:
1
<input class="button" type="submit" name="copy_all" value="Copy files"/>

Si hago
1
echo $image_file;
dentro del while el output está correcto. Sólo hay dos registros de prueba.

1
/volume1/web/recibos/upload/34-55-tcp_ip_frentea_iso.png/volume1/web/recibos/upload/10-recibo.PNG


No tengo mucha idea, He leído muchos forums y buscado código apropiado con no buenos resultados.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de José Manuel
Val: 211
Ha disminuido 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Problema al crear un archivo zip en php7 usando una consulta mysql

Publicado por José Manuel (62 intervenciones) el 27/01/2020 19:56:20
Hola José:

Tal vez algunas sugerencias que voy a hacerte ya las has llevado a cabo. De todas formas:

- ¿Se cumple la condición de la línea 19?¿Se ejecuta el addfile()?

- ¿Has mirado el log de PHP para ver si hay trazas de errores ahí?

El archivo se crea en el mismo lugar que el fichero PHP porque no has indicado ninguna ruta de destino, solamente el fichero de destino.

No se descarga porque para ello debes usar las cabeceras: header(...) necesarias que te lo permitan. Aquí hay un ejemplo con el uso de header() y con imágenes:

https://www.itsolutionstuff.com/post/php-how-to-create-zip-file-and-download-using-ziparchive-example.html#

Un saludo,
https://obelearningservices.com/blog/
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de jose
Val: 17
Ha disminuido su posición en 5 puestos en PHP (en relación al último mes)
Gráfica de PHP

Problema al crear un archivo zip en php7 usando una consulta mysql

Publicado por jose (7 intervenciones) el 29/01/2020 22:27:26
Hola José Manuel,

Disculpa la tardanza en contestar. No he podido mirar nada hasta hoy.

El código final me ha quedado como te expongo abajo. El archivo se descarga pero aparece vacío. Es lo único que falla.

Seguramente la línea 19, que me comentas, me falla. No veo los logs de php que contenta errores. Sobre la página que me dices ya la ví, He intentado seguir manuales y videos de youtube, sin mucho existo. De momento lo que estoy haciendo es que los archivos, en vez ziperalos, se copien en otra carpeta para separarlos del resto y comprimirlo manualmente.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
if(isset($_REQUEST['createzip']) and $_REQUEST['createzip']!=""){
    extract($_REQUEST);
    include('connection.php');
	$filename   = 'Renta_J&J.zip';
    $ticket_date_from = $_POST['ticket_date_from'];
	$ticket_date_to = $_POST['ticket_date_to'];
	$fileQry = "SELECT * FROM recibos WHERE ticket_date BETWEEN '$ticket_date_from' AND '$ticket_date_to'";
	$search_result_renta = filterTable($fileQry);
	$count_rows = mysqli_num_rows($search_result_renta);
	//$fileQry    =   $conn->query('SELECT * FROM recibos WHERE ticket_date BETWEEN $ticket_date_from AND $ticket_date_to');
   $pathdir = "/volume1/web/recibos/upload/";
   $dir = opendir($pathdir);
 
   $zip = new ZipArchive;
   if ($zip->open($filename,  ZipArchive::CREATE)=== TRUE){
       //while($row  = $fileQry->fetch_assoc()){
		while($row = mysqli_fetch_array($search_result_renta)){
			echo var_dump($row);
			$image_dir = $row['image_dir'];
			//$zip_from = $pathdir.$image_dir;
			echo $zip_from;
            //$zip->addFile(getcwd().'/'.'..uploads/'.$row['filename'], $row['filename']);
			$zip->addFile($pathdir.$image_dir, $image_dir);
        }
      $zip->close();
 
        header("Content-type: application/zip");
        header("Content-Disposition: attachment; filename=$filename");
        header("Content-length: " . filesize($filename));
        header("Pragma: no-cache");
        header("Expires: 0");
        readfile("$filename");
        unlink($filename);
   }else{
       echo 'Failed!';
    }
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de José Manuel
Val: 211
Ha disminuido 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Problema al crear un archivo zip en php7 usando una consulta mysql

Publicado por José Manuel (62 intervenciones) el 30/01/2020 12:25:58
Hola José:

He adaptado tu código obviamente, para hacer alguna prueba y me funciona sin problemas. Sin embargo, a la hora de añadir imágenes, las tengo en la misma carpeta que el script. Esta es la línea que tú tienes:

1
$zip->addFile($pathdir.$image_dir, $image_dir);

Yo hago algo como:

1
$zip->addFile("miimagen.png");

Como ves, lo que añado con .addFile() es una cadena de un fichero que existe y encuentra sin problemas. Entiendo que deberías poner algo como:

1
$zip->addFile($pathdir.$image_dir . $image_dir);

Y comprobaría que cadena forma: $pathdir.$image_dir . $image_dir para verificar después si realmente existe la imagen que me está indicando la cadena resultante.

A ver que tal. Un saludo,
https://obelearningservices.com/blog/
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de jose
Val: 17
Ha disminuido su posición en 5 puestos en PHP (en relación al último mes)
Gráfica de PHP

Problema al crear un archivo zip en php7 usando una consulta mysql

Publicado por jose (7 intervenciones) el 30/01/2020 19:56:37
Hola,

Con el siguiente cambio
1
$zip->addFile($pathdir.$image_dir);

Me da este output que es correcto
1
/volume1/web/recibos/upload/51-tcp_ip_frentea_iso.png

Sin embargo baja el archivo pero al abrirlo está vacio.

Te pongo una captura de pantalla.
zip
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de José Manuel
Val: 211
Ha disminuido 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Problema al crear un archivo zip en php7 usando una consulta mysql

Publicado por José Manuel (62 intervenciones) el 30/01/2020 20:35:13
Hola José:

Vaya. Si que es raro. ¿Has probado a añadir directamente entre comillas una imagen que esté en la misma carpeta que el script?

¿Todos los permisos están bien?¿PHP tiene permisos para leer sin problemas esas imágenes?

Por otro lado recuerdo que poniendo como segundo parámetro, el nombre del fichero a añadir, se solucionan algunos problemas. Más o menos:

1
$zip->addFile($pathdir . $image_dir, basename($image_dir));

También se que cuando se ejecuta en un sistema Windows, las rutas con barra / por delante, corrompían el fichero ZIP por culpa de un bug. Es tratado aquí (no sé si lo has visto): https://bugs.php.net/bug.php?id=57357.

Tal cual, no se me ocurre nada más José. A ver que tal.

Un saludo,
https://obelearningservices.com/blog/
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de jose
Val: 17
Ha disminuido su posición en 5 puestos en PHP (en relación al último mes)
Gráfica de PHP

Problema al crear un archivo zip en php7 usando una consulta mysql

Publicado por jose (7 intervenciones) el 30/01/2020 21:33:16
Hola José Manuel,

El sistema trabaja bajo linux. La carpeta de donde están los archivos tiene permiso total 777.

Con este statement hace lo mismo
1
$zip->addFile($pathdir . $image_dir, basename($image_dir));

También he probado esto y tampoco funciona.

1
2
$zip->addFile($pathdir."51-tcp_ip_frentea_iso.png");
$zip->addFile("/volume1/web/recibos/upload/51-tcp_ip_frentea_iso.png");

Ni idea.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de José Manuel
Val: 211
Ha disminuido 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Problema al crear un archivo zip en php7 usando una consulta mysql

Publicado por José Manuel (62 intervenciones) el 31/01/2020 07:54:51
Hola José:

Buff. Menudo expediente X. Imagino que ya lo habrás probado pero, ¿has creado un miniscript PHP que simplemente te añada una imagen que tengas directamente en la misma carpeta? Que solamente haga eso: crear un ZIP y contenga una imagen.

Si se me ocurre algo más te comento. Suerte.

Un saludo,
https://obelearningservices.com/blog/
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de jose
Val: 17
Ha disminuido su posición en 5 puestos en PHP (en relación al último mes)
Gráfica de PHP

Problema al crear un archivo zip en php7 usando una consulta mysql

Publicado por jose (7 intervenciones) el 31/01/2020 16:46:08
Buenas,

No se cual es el problema. La prueba que comentas lo hice e igual creó el zip sin contenido.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar