apache

Forzar la descarga de archivos en Apache con .htaccess e IIS con web.config

Cuando tenemos una página web, hay ocasiones en la que queremos que un fichero se descargue, por ejemplo si queremos hacer un sistema de almacenamiento tipo dropbox o simplemente unos pdf que tenemos en nuestra web. Normalmente cuando tenemos un archivo como un pdf, tradicionalmente este siempre se descargaba al abrirlo, pero con los avances en los navegadores, cada día mas potentes, nos dan previsualizadores de pdf, por lo que ya por defecto no se descarga porque los vemos online.

En este ejemplo hablo de pdf, pero se puede llevar a cualquier tipo de archivo, incluso un .html. Un archivo pdf tiene como MIME application/pdf, pero ¿Qué es un MIME? Un MIME es un estándar que define tipos de ficheros en base a una categoría y una subcategoría, por ejemplo, un pdf de tipo application/pdf quiere decir que es un archivo de aplicación del tipo pdf. Otros ejemplos de MIME son de imágenes como el image/jpeg o de texto en html text/html. Cuando un navegador abre un pdf, el servidor tiene por defecto configurado indicar que el archivo es de tipo application/pdf que se indica en la cabecera de http Content-Type.

Tras esta breve explicación, a veces pasa, que no todos los navegadores tienen visores de pdf, por los que algunos como pasa con algunas versiones de Firefox o Internet Explorer se descarguen los archivos, mientras que Safari o Chrome los visualicen online. Pero claro, este comportamiento no es muy elegante ya que quizás sea necesario que se comporte igual en todos los navegadores y tengamos que hacer que siempre se descargue el archivo y esto ya depende del servidor.

Para forzar la descarga de archivos, como el ejemplo que tratamos, un .pdf, tendremos que redefinir un MIME asociado a una extensión, es este caso diremos que es un octet-stream o un stream de bytes (un archivo binario). Al entender el navegador, que el archivo se trata de un archivo binario, no intentara leerlo sino que lo descargará independientemente de la extensión que tenga.

Forzar la descarga de archivos en Apache con .htaccess

Tan solo tenemos que añadir una nueva entrada AddType donde definiremos que los archivos .pdf son binarios y por tanto el navegador los descargará:

AddType application/octet-stream .pdf

Forzar la descarga de archivos en IIS con web.config

Al igual que con apache, deberemos indicar al servidor que el tipo de archivo .pdf es un binario:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <staticContent>
      <mimeMap fileExtension=".pdf" mimeType="application/octet-stream" />
    </staticContent>
  </system.webServer>
</configuration>

Mac Os X con PHP y Apache

Como buen desarrollador web y acostumbrándome poco a poco al uso de Mac OS X, me he decidido a ponerme de lleno con el juego web que estoy desarrollando. Para hacer esto tengo que instalar o debería de instalar primero un IDE para el desarrollo, luego Apache y PHP, la base de datos no porque utilizo la de mi hosting y así evitar ciertos pasos que de momento y dado que esta en una fase alfa, me lo puedo ahorrar.

Como IDE necesito uno que tenga Intellisense (que autocomplete código) que funcione bien y reconozca todo, tanto variables y funciones, como clases, herencias, métodos estáticos, declaración de tipo de objeto por parámetro a un método, etc. por esto solo conocía 2, el Zend Studio que esta muy bien pero también es de pago y no barato precisamente y un poco lento, pero con mi ordenador no creo que hubiera problemas. El otro IDE es el Eclipse que aunque me suele consumir unos 400MB de RAM al tener 4GB no habría problema y es bastante completo y rápido, además de completar con muchos plugins que tiene el Eclipse. Por ultimo y de casualidad he descubierto que han terminado el plugin de NetBeans para usarlo como IDE de PHP y la verdad es que para mi gusto es el mejor, ya que es muy rápido, consume muy poco, tiene implementado todo lo que necesito en un bloque muy solido (no como Eclipse que tiene plugins que no terminan de encajar entre ellos) y lo mejor de todo, que para mi gusto y como IDE, me gusta mucho el NetBeans y su sistema de organización. Así que por esto me he quedado con NetBeans como IDE de PHP.

Una vez esta el IDE instalado, necesito el motor PHP y el servidor web Apache. Buscando en el disco duro encuentro que hay referencias a Apache y en la conflagración de sistema, hay un método de compartir que se llama «Compartir web», que de arrancarlo lo que hacemos es poner en marcha el servicio de Apache2. Ahora nos toca PHP, que para mi sorpresa también tiene viene instalado en Mac Os X por defecto, lo único que tenemos que hacer es descomentar la linea en la que carga el modulo de PHP y reiniciar Apache y ya tenemos todo listo y configurado para trabajar.

La verdad es una sorpresa encontrarme con Java y PHP y Apache ya instalado, algo que nos ahorra mucho tiempo a la hora de instalar todo lo necesario para trabajar

Por ultimo comentar que lamentablemente MySQL si deberemos de instalarla, aunque es mas sencillo que instalar que en Windows por lo que tardaremos lo que tardaremos en bajar el archivo de MySQL, hacer doble click y ejecutar los 2 o 3 archivos que lleva en su interior.

Apache y directorios de usuarios (UserDir)

Recuerdo que en un trabajo en el que estube, cada uno tenia un usuario de Unix (era FreeBSD) y cada usuario tenia en su home una carpeta public_html para que no tuvieramos que usar todos y darnos permisos en /var/www.

Ahora al instalar Ubuntu en el portatil, quiero volver a poner todas las webs que tenia en local pero claro, no le voy a dar permisos a /var/www y aunque solo yo usare el portatil, no estaria de mas tener un sistema para que en la home de cada usuario exista una carpeta public_html en la cual cada usuario ponga las webs que quiera.

Este sistema que era desconocido para mi, se llama UserDir. Para instalarlo si estamos en Ubuntu, lo unico que tendremos que hacer es buscar en el Synaptic un paquete llamado libapache2-mod-ldap-userdir, o mas facil, buscar directamente «UserDir» y nos aparecera el paquete en cuestion. Una vez instalado, deberemos de ir a la carpeta /etc/apache2/mods-available y copiaremos o moveremos los archivos userdir.conf y userdir.load a la carepta /etc/apache2/mods-enabled. Una vez copiados los archivos, abriremos una consola y ejecutaremos el comando «/etc/init.d/apache2 restart» para reiniciar apache.

Una vez reiniciado apache, y copiados las configuraciones, ya lo tenemos todo listo. Ahora toca probarlo, asi que iremos a la home de nuestro usuario /home/nombreusuario y creamos una nueva carpeta public_html, una vez hecho esto, creamos un index.html de prueba, abrimos nuestro navegador y escribimos http://localhost/~nombreusuario y deberia de aparecernos nuestra pagina de inicio que creamos.

Asi de sopeton puede parecer algo complicado, pero luego son 2 tonterias que no nos llevara mas de 2 minutos configurarlo.

Aparte de esto, si abrimos el archivo userdir.conf, podremos modificar las reglas para cambiar el directorio public_html de la home y ponerlo en otro lugar.

Scroll al inicio