Descarga de archivos con PHP

Si necesitamos compartir archivos, tenemos dos opciones; los subimos a la nube (gestores de descarga, como Google Drive, MediaFire o MEGA), o podemos permitir que lo descarguen desde nuestra web.

Aunque, como desventaja, estas descargas ocuparán ancho de banda en nuestro hosting, a mi parecer, permiten más control respecto al archivo (por ejemplo, podemos ver desde qué dispositivo se ha descargado el archivo con PHP) que los gestores de descarga. Además, podemos actualizar los archivos con una simple subida al FTP.

¿Cómo generar la descarga de un archivo?

Primero, debemos comprobar si nuestro servidor/hosting tiene instalado (y activo) PHP. Para ello, creamos un nuevo archivo llamado, por ejempo, test.php (es importante que sea un archivo con extensión .php, no puede ser test.php.html ni nada así).

En ese archivo, escribiremos lo siguiente entre las etiquetas BODY de HTML:

<?php phpinfo(); 
?>

Una vez escrito eso, debemos guardarlo (ya sabes cómo), lo subimos a nuestro hosting y visitamos esa página.

Si vemos el código escrito, nuestro servidor NO permite PHP. De lo contrario, veremos la información del PHP (la versión activa, el sistema del server, la configuración, etc.)

Si PHP no está activo en el servidor, debes instalarlo. Si no está instalado y no puedes instalarlo, puedes dejar de leer.

Código y explicaciones

Para poder permitir que alguien descargue nuestro(s) archivo(s), debemos crear un archivo PHP donde debe decir lo siguiente:

<?php
header("Content-disposition: attachment; filename=nombre_del_archivo.extension");
header("Content-type: MIME");
readfile("nombre_del_archivo.extension");
?>

A continuación explicaré las partes del código en rojo:

nombre_del_archivo.extension = Por ejemplo, mi_archivo.pdf (se entiende, ¿no?)

MIME = Multipurpose Internet Mail Extensions (o “Extensiones Multipropósito de Correo en Internet”), son, según Wikipedia, “una serie de convenciones o especificaciones dirigidas al intercambio a través de Internet de todo tipo de archivos (texto, audio, vídeo, etc.) de forma transparente para el usuario“.

Dispones de una lista de archivos y su propia extensión MIME en este enlace.

Por ejemplo, podemos ver que el MIME de un PDF es “application/pdf“, el de un ZIP es “application/zip“, el de una imagen JPG es “image/jpeg“, el de un MP3 es “audio/mpeg” y el de EXE es “application/octet-stream“.

En este caso, queremos que se descargue, por ejemplo, un PDF llamado “Hipercubo”. Entonces, escribiremos lo siguiente:

<?php
header("Content-disposition: attachment; filename=Hipercubo.pdf");
header("Content-type: application/pdf");
readfile("Hipercubo.pdf");
?>

No olvides que debes definir el directorio donde está guardado el archivo, y subirlo al FTP.

Una vez hayamos definido el nombre y la extensión, guardamos el archivo como, por ejemplo, “descarga.php“, lo subimos al hosting y pasamos al siguiente paso; enlazar la descarga.

Para eso, simplemente tenemos que crear un hipervínculo que llame al archivo PHP.

<a href="descarga.php">Descargar PDF</a>

Claramente, debemos apuntar el hipervínculo a el directorio donde hemos guardado el PHP.
No es lo mismo:

<a href="descarga.php">Descargar PDF</a>

Que…

<a href="documentos/descarga.php">Descargar PDF</a>
<a href="archivos/pdf/descarga.php">Descargar PDF</a>

Ya debes saber que conocer y respetar los directorios del FTP es importante para enlazar correctamente.

Conclusión:

Un poco de PHP y un hipervínculo nos va a permitir poder descargar archivos desde nuestra web.
Recomiendo habituarse a comprimir los archivos en ZIPs, principalmente porque significa un poco menos de “consumo” de ancho de banda en el servidor.

Espero que el tutorial haya sido de utilidad. Nos leemos, ¡saludos!

8 comments

  1. Christian · abril 21

    Hola, cómo puedo bajar un archivo php? No soy programador. Necesito bajar un archivo php del campus virtual de UBA XXI, donde tiene ejercicios y evaluaciones de la materias con sus respuestas y explicaciones de las mismas. El campus pone a la par un archivo en pff, pero este no tiene la respuestas y las explicaciones. ¿Cómo hago para bajar archivos PHP desde Google Chorme o Internet Explorer, para poder ver los archivos php desde mi computadora sin entrar a Internet?
    Gracias, saludos!

    Me gusta

    • Rocanrol · abril 23

      Hola, Christian.

      No termino de entender qué es lo que necesitas, si bajar un archivo .php (cosa que es prácticamente imposible, porque PHP funciona del lado del servidor) o bajar un PDF (no conozco los .pff, así que supongo que quieres decir .pdf).

      Te insto a que expliques más detalladamente tu necesidad.

      De todas formas, este blog está creado para ayudar a gente relacionada con el mundo de la programación web y la informática. Mi recomendación es que contactes con la gente de UBA XXI para solucionarlo.

      Saludos.

      Me gusta

  2. Christian Antoriano · abril 25

    Hola, gracias por responder
    Quiero bajar archivos php de la página de UBA XXI o desde cualquier página.
    Se puede hacer?
    Saludos

    Me gusta

    • Rocanrol · abril 25

      Los archivos “.php” generalmente no son descargables, por cuestiones de seguridad.

      Me gusta

  3. Carlos · abril 27

    Hola, tengo una duda!
    hice todo tal y como hiciste tu, pero a la hora de descargar el archivo, cuando lo voy abrir el archivo sale da?ado, sabes porque pasa esto?

    Me gusta

  4. Mauricio · octubre 11

    Que tal amigo el código es muy sencillo y me sirvió, pero tengo duda y si quiero descargar mas archivos que tengo en mi FTP tendría que ser un archivo php para cada archivo que se descargara?

    Agradecería una respuesta saludos…

    Me gusta

    • Rocanrol · octubre 11

      Hola;

      Lo que podías hacer es un `select` de HTML donde estén listados los archivos que se puedan/quieran descargar, y tras seleccionarlo enviar una petición AJAX a PHP para que, después de sanitizar todo el contenido para evitar inyecciones de código, compruebe si ese archivo existe. Y si así fuese, que lo descargue.

      ¿Se entiende?

      Saludos.

      Me gusta

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s