[Php-avanzado] Bajar archivos

Leonardo Tadei - Pegasus Tech Supply leonardot en pegasusnet.com.ar
Jue Nov 22 15:22:29 ART 2012


Hola Mario,

El jue, 22-11-2012 a las 11:27 -0300, Mario Gomez Cassou escribió:
> Hola gente: 
> en un script para bajar archivos (abajo copio el código) tengo dos
> problemas: 
> 
> 1) para detectar el tipo de archivo usaba la función
> mime_content_type() que ahora resulta obsoleta. Modifiqué el código
> para utilizar lo recomendado y cuando quiero utilizarlo en mi servicio
> de hosting obtengo
> "Fatal error: Call to undefined function finfo_open()":
> es porque estas cosas funcionan con PHP 5.3+ y en el mi hosting hay
> 5.2... Esto es mas que nada un comentario. Paso a la consulta

	Tal y como decís, finfo_open() necesita PHP 5.3 o superior.
	Podés hacer código para ambas versiones de PHP usando la función
function_exists() para chequear que exista la función; si existe, la
usás, y si no existe, usás el código anterior.

	(ventajas de los lenguajes interpretados, que fallan solo al querer
ejecutar el código, y no solo por estar escrito)

> 2) si un archivo se llama "gato y perro.pdf" el script me lo baja como
> "gato.pdf"; como se manejan los nombres con espacios?

	Codificalo como un URL.

	En realidad, el archivo "gato y perro.pdf" no se transforma mágicamente
en gato.pdf, sino que el nombre de archivo se trunca al primer espacio,
dejando "gato" y como el navegador recibe el tipo MIME, le pone él una
extensión apropiada.

	A propósito, estás enviando mal la codificación de los archivos PHP.

	Saludos!

> Todo esto está en www.gomezcassou.com.ar/archivos
> Saludos
> Mario
> 
> // "$arch" es el archivo a bajar
> 
>         /* esto requiere PHP 5.3+
>         $finfo = finfo_open(FILEINFO_MIME_TYPE);
>         $tipo  = finfo_file($finfo,$arch);
>         finfo_close($finfo);
>         */
>         
>         // mime_content_type es obsoleto pero mientras tanto...
>         $tipo  = mime_content_type($arch);
>         //die("<br>- $arch - $tipo");
> 
>         @header("Cache-Control: ");// leave blank to avoid IE errors
>         @header("Pragma: ");// leave blank to avoid IE errors
>         @header("Content-type: $tipo");
>         @header("Content-Disposition: attachment; filename=$arch");
>         readfile("$arch");
> _______________________________________________
> Php-avanzado mailing list
> Php-avanzado en pato2.fi.mdp.edu.ar
> http://www3.fi.mdp.edu.ar/cgi-bin/mailman/listinfo/php-avanzado

-- 
Leonardo Tadei
leonardot en pegasusnet.com.ar
Web: http://leonardo.tadei.com.ar
Firma pública: http://www.pegasusnet.com.ar/LeonardoTadei-public.key



Más información sobre la lista de distribución Php-avanzado