Foros del Web » Programando para Internet » PHP »

Dar fichero al cliente sin crearlo en el servidor

Estas en el tema de Dar fichero al cliente sin crearlo en el servidor en el foro de PHP en Foros del Web. Buenas a todos, estoy trabajando con php y mysql. ¿Hay alguna forma de pasar un archivo al cliente sin tener que crearlo en el servidor ...
  #1 (permalink)  
Antiguo 05/04/2010, 04:29
 
Fecha de Ingreso: febrero-2008
Ubicación: Madrid
Mensajes: 474
Antigüedad: 16 años, 9 meses
Puntos: 1
Exclamación Dar fichero al cliente sin crearlo en el servidor

Buenas a todos, estoy trabajando con php y mysql.

¿Hay alguna forma de pasar un archivo al cliente sin tener que crearlo en el servidor?

Lo que quiero hacer es realizar una consulta, generar el xls con los resultados y que el usuario se pueda descargar dicho archivo.

(La opción de crear el archivo y destruirlo despues de que el usuario se lo descargue no me parece correcta y sinceramente no sabría como implementarlo)

Gracias.
  #2 (permalink)  
Antiguo 05/04/2010, 06:42
Avatar de jackson666  
Fecha de Ingreso: noviembre-2009
Ubicación: Buenos Aires, Argentina
Mensajes: 1.971
Antigüedad: 15 años
Puntos: 65
Respuesta: Dar fichero al cliente sin crearlo en el servidor

http://www.google.com.ar/search?q=generar+xls+con+php

Y porque no te parece correcta?
__________________
HV Studio
Diseño y desarrollo web
  #3 (permalink)  
Antiguo 05/04/2010, 06:48
Avatar de cemansilla  
Fecha de Ingreso: septiembre-2007
Ubicación: Buenos Aires, Argentina, Argentina
Mensajes: 214
Antigüedad: 17 años, 2 meses
Puntos: 6
Respuesta: Dar fichero al cliente sin crearlo en el servidor

Tan sencillo como enviar unas cabeceras:

Código PHP:
$xls "creo la tabla"// aqui generarias el contenido

header("Content-Type: application/force-download");
header("Content-Disposition: attachment; filename=miexcel.xls");
header("Content-Transfer-Encoding: binary");
echo 
$xls
Saludos!
__________________
CÉSAR MANSILLA
Web & Mobile Developer - Analista - Creativo - Curioso
http://cesarmansilla.com/
http://cesarmansilla.com/blog/
  #4 (permalink)  
Antiguo 05/04/2010, 07:19
 
Fecha de Ingreso: febrero-2008
Ubicación: Madrid
Mensajes: 474
Antigüedad: 16 años, 9 meses
Puntos: 1
Respuesta: Dar fichero al cliente sin crearlo en el servidor

Respondiendo a jackson666: ¿Cómo podría detectar que el usuario ya se ha descargado el fichero para proceder a borrarlo?

Respondiendo a cemansilla: ¿Es válido para cualquier sistema operativo o solo para windows y excel? Necesito que valga también para linux y openoffice. ¿Y si necesito modificar el aspecto de la celda o similar?
  #5 (permalink)  
Antiguo 05/04/2010, 07:38
Avatar de cemansilla  
Fecha de Ingreso: septiembre-2007
Ubicación: Buenos Aires, Argentina, Argentina
Mensajes: 214
Antigüedad: 17 años, 2 meses
Puntos: 6
Respuesta: Dar fichero al cliente sin crearlo en el servidor

Cita:
Iniciado por jorgegetafe Ver Mensaje
Respondiendo a cemansilla: ¿Es válido para cualquier sistema operativo o solo para windows y excel? Necesito que valga también para linux y openoffice. ¿Y si necesito modificar el aspecto de la celda o similar?
En cuanto al S.O. Linux sinceramente desconozco, será cuestión de probar pero imagino que no habrá problemas. Y con Open Office funciona bien.

Yo uso esos encabezados para generar reportes en un administrador, y nunca fué un requerimiento aplicar estilos a las celdas por lo que no lo hice. Tampoco hay mucha info al respecto en la web pero acá encontré algo que quizá sirva: http://www.thaicreate.com/php/php-ex...le-format.html

Saludos!
__________________
CÉSAR MANSILLA
Web & Mobile Developer - Analista - Creativo - Curioso
http://cesarmansilla.com/
http://cesarmansilla.com/blog/
  #6 (permalink)  
Antiguo 05/04/2010, 07:53
 
Fecha de Ingreso: febrero-2008
Ubicación: Madrid
Mensajes: 474
Antigüedad: 16 años, 9 meses
Puntos: 1
Respuesta: Dar fichero al cliente sin crearlo en el servidor

Gracias, lo miraré en cuanto pueda.

Y para la otra opción? detectar cuando el usuario ya se ha descargado el fichero generado en el servidor para poder así borrarlo?
  #7 (permalink)  
Antiguo 05/04/2010, 10:08
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: Dar fichero al cliente sin crearlo en el servidor

No es posible hacerlo ya que el buffer del contenido del fichero que se envia desde el servidor es asíncrono con el cliente, por lo que es posible que ya se haya enviado todo el archivo pero que el cliente haya cancelado recibir el file.

Lo mejor en esos casos es tener un directorio temporal y borrar los archivos cada X tiempo.

Saludos.
  #8 (permalink)  
Antiguo 05/04/2010, 11:03
 
Fecha de Ingreso: febrero-2008
Ubicación: Madrid
Mensajes: 474
Antigüedad: 16 años, 9 meses
Puntos: 1
Respuesta: Dar fichero al cliente sin crearlo en el servidor

Cita:
Iniciado por GatorV Ver Mensaje
No es posible hacerlo
¿Y esta solución? La he encontrado en el foro.
Código PHP:
<?php
    error_reporting
(0);
    
$f $_POST['archiv'];
    
$ruta $_POST['directorio'];
    
$ruta '../../'.$ruta;
    
$ruta $ruta.'/';
    
header("Content-type: application/octet-stream");
    
header("Content-Disposition: attachment; filename=\"$f\"\n");
    
$fp=fopen($ruta."$f""r");
    
fpassthru($fp);
    
register_shutdown_function("borrado");     

    function 
borrado(){
      global 
$fp$f;
      
$ruta $_POST['directorio'];
      
fclose($fp);
      
$archivo_a_borrar="/wamp/www/".$ruta."/".$f;
      
unlink($archivo_a_borrar);
    }
?>
  #9 (permalink)  
Antiguo 05/04/2010, 11:19
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: Dar fichero al cliente sin crearlo en el servidor

Pruebala en teoria debe de funcionar, ya que al terminar de ejecutar el archivo borra el directorio, aunque eso no te garantiza que el usuario haya aceptado el archivo.

Saludos.

Etiquetas: cliente, dar, fichero, servidores
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 21:28.