Ir al contenido principal

PHP: Forzar la descarga de un fichero desde navegador.

Alguna vez habremos querido desde nuestra web que un enlace interno a un fichero nuestro sea descargado realmente y no abierto o interpretado por el navegador o por el programa de turno del sistema operativo.

Para hacer esto nos crearemos un script en PHP como este:

Hay muchas veces que queremos que desde nuestra web, a la hora de descargar un fichero, real
A esa página le pondremos el siguiente código:

[sourcecode language="php"]
<?php
$fichero = $_REQUEST['f'];

if (trim($fichero)!='') {
$path = 'path_al_fichero' . '/' . $fichero;
if (is_file($path)) {
header ("Content-Disposition: attachment; filename=" . $path . "nn");
header ("Content-Type: application/octet-stream");
header ("Content-Length: " . filesize($path));
readfile($path);
}
}

?>
[/sourcecode]

Le pondremos el nombre download.php, y desde otra página crearemos enlaces de la siguiente forma:

[sourcecode language="html"]
<a href="download.php?f=documento.pdf">Bajar documento</a>
[/sourcecode]

Donde documento.pdf es el documento que queremos descargar.

Comentarios

Entradas populares de este blog

Cosmic Supremacy : Juego 4X online, gratuito y multijugador basado en conquistas espaciales

  Llevaba bastante tiempo buscando un juego de estrategia en el espacio, multijugador , y que fuera por turnos . Un requisito que siempre tuve es que fuera fácil aprenderlo, y tuviera suficiente ayuda o tutoriales. Creo que lo he encontrado, se llama Cosmic Supremacy , y es gratis . Os dejo aquí información traducida desde su web oficial por si os animáis :) ¿Qué es Cosmic Supremacy? Cosmic Supremacy es un juego gratuito de estrategia espacial multijugador masivo basado en ticks/turnos con una interfaz 3D 'Galaxy View'. Compartes una galaxia con cientos de jugadores, cada uno con su propia civilización alienígena. Algunos de ellos pueden llegar a ser tus enemigos, otros podrían ser tus aliados. Necesitas explorar la galaxia que te rodea, descubrir nuevos sistemas solares, colonizar nuevos planetas y expandir tu imperio. Puedes diseñar todas las naves de tu flota e investigar nuevas tecnologías avanzadas para poder construir naves más rápidas y fuertes que te darán la ventaja ...

Hacer una pausa en un fichero por lotes batch (bat o cmd)

En consola de Windows (antiguamente Ms-Dos) desde siempre se ha podido hacer una pausa, esperando confirmación del usuario. El comando en cuestión es: pause Si escribimos pause en nuestra consola veremos que la consola se queda pausada hasta que pulsamos una tecla. Esto es útil en ficheros batch (ya sean .bat o .cmd) para hacer pausas controladas entre distintos comandos, a la espera que el usuario pulse alguna tecla para continua. Pero, ¿qué ocurre si queremos una pausa de cierto número de segundos y luego continúe el proceso automáticamente ? No hay ningún comando que lo haga, pero haciendo el siguiente "truco" (hace un ping a una URL especificando el número de segundos como timeout) lo podremos conseguir ping -n 10 localhost > null Simplemente cambiar el 10 por el número de segundos que queráis, y ya tendréis en consola (o msdos) una pausa de N segundos, y luego el proceso continuará automáticamente.  

Cómo colorear y añadir información de GIT a la consola (shell) de linux al conectarse remótamente por SSH

Si os pasa que tenéis vuestro terminal de Linux coloreado y veis información de GIT en el prompt , y al conectarse en remoto vía SSH al mismo servidor ya no lo veis, lo que necesitáis hacer es crear, o editar, el siguiente fichero en vuestro directorio home ~/.bash_profile , y añadir la siguiente información: [sourcecode] # set a fancy prompt (non-color, unless we know we "want" color) case "$TERM" in xterm-color) color_prompt=yes;; esac # uncomment for a colored prompt, if the terminal has the capability; turned # off by default to not distract the user: the focus in a terminal window # should be on the output of commands, not on the prompt force_color_prompt=yes if [ -n "$force_color_prompt" ]; then if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then # We have color support; assume it's compliant with Ecma-48 # (ISO/IEC-6429). (Lack of such support is extremely rare, and such # a case would te...