Por regla general los exploradores de Internet muestran las páginas con contenido ASCII (texto plano) y en el caso de que su contenido sea binario, la muestran en caso de que las "conozcan", por ejemplo los JPG, GIF ó PNG, en el caso de tener instalado Flash o la máquina virtual de java o PDF navegarían a estos archivos o sacaría el mensaje informativo de descarga en caso de no tenerlos, o por ejemplo un documento de Word en Internet Explorer lo mostraría mientras que en otros navegadores mostraría el mensaje de descarga.
Sin embargo en muchas ocasiones, podemos querer forzar a que un archivo siempre se descargue independientemente del tipo de archivo que sea. Para estos casos podemos informar al explorador de que el archivo que le enviamos es para descargar. Esto se hace con las cabeceras del documento, concretamente: El artículo de ejemplo recoge el nombre del archivo a descargar por URL, con la variable "doc", el único cambio que habría que hacer en el PHP es pasar la dirección del directorio de "descargas". El documento a descargar se coge de la unión del directorio de descargas y el nombre del documento pasado por URL. Por motivos de seguridad se reemplazan los dos tipos de barras separadoras de directorios en diferentes sistemas operativos por "_". Esto evita que usuarios malintencionados "jueguen" con las variables pasadas y se descarguen documentos que no sean públicos.
También se podría hacer que en vez de pasar el archivo mediante una variable, escribir el archivo a mano en el PHP, o pasar una variable tratada con anterioridad, reemplazando la línea: por (escribiendo el archivo a mano): o (recogiendo el dato de una variable de php): Por último, recordar que no se debe de enviar ningún dato antes de las cabeceras (header), tener cuidado, ya que es muy típico el error de introducir antes del código un salto de línea o un espacio y con esto ya daría un error de tipo Warning: Cannot modify header information - headers already sent by (output started ...
HTML: Código:
Sin embargo en muchas ocasiones, podemos querer forzar a que un archivo siempre se descargue independientemente del tipo de archivo que sea. Para estos casos podemos informar al explorador de que el archivo que le enviamos es para descargar. Esto se hace con las cabeceras del documento, concretamente: El artículo de ejemplo recoge el nombre del archivo a descargar por URL, con la variable "doc", el único cambio que habría que hacer en el PHP es pasar la dirección del directorio de "descargas". El documento a descargar se coge de la unión del directorio de descargas y el nombre del documento pasado por URL. Por motivos de seguridad se reemplazan los dos tipos de barras separadoras de directorios en diferentes sistemas operativos por "_". Esto evita que usuarios malintencionados "jueguen" con las variables pasadas y se descarguen documentos que no sean públicos.
También se podría hacer que en vez de pasar el archivo mediante una variable, escribir el archivo a mano en el PHP, o pasar una variable tratada con anterioridad, reemplazando la línea: por (escribiendo el archivo a mano): o (recogiendo el dato de una variable de php): Por último, recordar que no se debe de enviar ningún dato antes de las cabeceras (header), tener cuidado, ya que es muy típico el error de introducir antes del código un salto de línea o un espacio y con esto ya daría un error de tipo Warning: Cannot modify header information - headers already sent by (output started ...
HTML: Código: