Cómo descargar un archivo en PHP

Cómo descargar un archivo en PHP
En general, no se requiere un script PHP para descargar un archivo con las extensiones exe y cremallera. Si la ubicación del archivo de este tipo de archivo se establece en el href Atributo del elemento de anclaje, luego el archivo se descarga automáticamente cuando el usuario hace clic en el enlace de descarga. Algunos archivos, como imagen archivos, Pdf archivos, texto archivos, CSV archivos, etc., No descargue automáticamente y, en su lugar, abra en el navegador cuando el usuario haga clic en el enlace de descarga. Estos archivos se pueden descargar por la fuerza en PHP usando el readfile () función que no se descarga automáticamente. Este tutorial le muestra cómo descargar por la fuerza cualquier archivo usando el script php.

Verifique los enlaces de descarga

Se mencionó anteriormente que cremallera y exe Descarga de archivos automáticamente, sin usar el script php. Primero, cree un archivo HTML con el siguiente código. Aquí, los cuatro elementos de anclaje se definen para descargar los cuatro tipos de archivos. Estos tipos de archivos incluyen archivos de texto, zip, pdf y jpg.

Descargar.html



Descargar archivos


Descargar archivo de texto


Descargar el archivo zip


Descargar archivo PDF


Descargar archivo JPG



Producción
El siguiente cuadro de diálogo aparecerá descargar el archivo después de hacer clic en el enlace del archivo zip. El usuario puede descargar el archivo o abrir el archivo en el manager de archivo.


Si hace clic en el archivo de imagen, la imagen se abrirá automáticamente en el navegador, como se muestra en la siguiente salida. Debe guardar el archivo para hacer una copia del archivo de imagen en la unidad local. De la misma manera, cuando hace clic en PDF y enlaces de archivo de texto, el contenido del archivo se abrirá en el navegador sin descargar el archivo. La solución a este problema es descargar el archivo por la fuerza utilizando el PHP incorporado readfile () función.

Descargar archivo usando la función readFile ()

El readfile () La función se usa en el script PHP para descargar por la fuerza cualquier archivo de la ubicación actual, o el archivo con la ruta del archivo. La sintaxis de esta función se da a continuación.

Sintaxis
int readFile (String $ FileName [, bool $ use_include_path = false [, recurso $ context]]))

Esta función puede tomar tres argumentos. El primer argumento es obligatorio, y los otros dos argumentos son opcionales. El primer argumento, $ nombre de archivo, almacena el nombre de archivo o el nombre de archivo con la ruta que se descargará. El valor predeterminado del segundo parámetro, $ use_include_path, es falso y se establecerá en verdadero si el nombre de archivo con la ruta se usa en el primer argumento. El tercer argumento, $ contexto, se usa para indicar el recurso de flujo de contexto. Esta función devuelve el número de bytes leídos del archivo mencionado en el primer argumento. Los usos de esta función se muestran en los siguientes dos ejemplos.

Ejemplo 1: Descargar archivo con nombre de archivo

En este ejemplo, crearemos un archivo HTML con el siguiente código, donde el nombre del archivo se pasará como un parámetro de la URL nombrada camino, y el valor de este parámetro se pasará al archivo php nombrado descargar.php.

descargar2.html



Descargar archivos


Descargar archivo de texto


Descargar el archivo zip


Descargar archivo PDF


Descargar archivo JPG



Crearemos el archivo PHP con el siguiente código para descargar el archivo por la fuerza. Aquí el Está establecido() la función se usa para verificar si el $ _Get ['ruta'] se define. Si se define la variable, el El archivo existe() La función se usa para verificar si el archivo existe en el servidor. A continuación, el encabezamiento() La función se utiliza para establecer la información del encabezado necesaria antes de usar el readfile () función. El Basename () la función se utiliza para recuperar el nombre de archivo y el tamaño del archivo() La función se usa para leer el tamaño del archivo en bytes, que se mostrará en el cuadro de diálogo de apertura para descargar el archivo. El enjuagar() La función se usa para borrar el búfer de salida. El readfile () la función se usa solo con el nombre de archivo, aquí.

descargar.php

if (isset ($ _ get ['ruta']))

// Lee el nombre de archivo
$ filename = $ _get ['ruta'];
// verificar el archivo existe o no
if (file_exists ($ filename))
// Definir información del encabezado
Encabezado ('Contenido-Descripción: File Transfer');
encabezado ('Content-type: aplicación/octet-stream');
Encabezado ("Cache-Control: No-Cache, debe revalidar");
encabezado ("expiras: 0");
Encabezado ('Contenido-Disposición: Adjunto; FileName = "'.Basename ($ nombre de archivo).'"');
encabezado ('Content-longitud:' . filesize ($ filename));
Header ('Pragma: Public');
// Borrar búfer de salida del sistema
enjuagar();
// leer el tamaño del archivo
readfile ($ nombre de archivo);
// Terminar desde el script
morir();

demás
El archivo echo "no existe.";


demás
Echo "El nombre de archivo no está definido."
?>

Producción
La siguiente salida aparecerá después de hacer clic en el enlace de descarga del archivo de imagen. El tamaño del archivo del rosa.JPG La imagen es 27.2 kb, Como se muestra en el cuadro de diálogo. Puede descargar el archivo seleccionando el Guardar el archivo Botón de radio y presionando el DE ACUERDO botón.

Ejemplo 2: Descargar archivo con la ruta del archivo

Si el archivo existe en la ubicación del archivo dada, se requerirá que la ruta del archivo mencione en la URL. En este ejemplo, crearemos un archivo HTML con el siguiente código, que pasará el nombre de archivo con la ruta del archivo:

descargar3.html



Descargar archivos


Descargar archivo PDF


Descargar archivo JPG



Crearemos un archivo PHP con el siguiente código para descargar un archivo de la ruta del archivo. El código PHP en el ejemplo anterior se modificará ligeramente para descargar el archivo desde la ruta dada. El ClearStateCache () La función se usa para borrar el caché que se almacenaba previamente. Se utilizan dos argumentos en el readfile () función.

descargar2.php

if (isset ($ _ get ['ruta']))

// Lee la URL
$ url = $ _get ['ruta'];
// borrar el caché
ClearStatCache ();
// verificar la ruta del archivo existe o no
if (file_exists ($ url))
// Definir información del encabezado
Encabezado ('Contenido-Descripción: File Transfer');
encabezado ('Content-type: aplicación/octet-stream');
Encabezado ('Contenido-Disposición: Adjunto; FileName = "'.Basename ($ URL).'"');
encabezado ('Content-longitud:' . filesize ($ url));
Header ('Pragma: Public');
// Borrar búfer de salida del sistema
enjuagar();
// leer el tamaño del archivo
readfile ($ url, verdadero);
// Terminar desde el script
morir();

demás
ruta de archivo de echo "no existe.";


La ruta del archivo de echo "no está definida."
?>

Producción
Después de hacer clic en el enlace de descarga del archivo PDF, aparecerá la siguiente salida.

Tutorial de video

Conclusión

Este artículo proporcionó una forma simple de descargar por la fuerza cualquier archivo utilizando el script PHP, para ayudar a los lectores a agregar la función de descarga en su script.