PHP - Listar links de descarga de archivos de un directorio.

 
Vista:

Listar links de descarga de archivos de un directorio.

Publicado por Angel Luis (19 intervenciones) el 11/04/2016 13:58:38
Hola,

Tengo la siguiente función para que me lista todos los nombres de los ficheros que hay en un directorio:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<?php
//Creamos Nuestra Función
function listFiles($directorio){ //La función recibira como parametro un directorio
if (is_dir($directorio)) { //Comprobamos que sea un directorio Valido
if ($dir = opendir($directorio)) {//Abrimos el directorio
 
echo '<ul>'; //Abrimos una lista HTML para mostrar los archivos
 
while (($archivo = readdir($dir)) !== false){ //Comenzamos a leer archivo por archivo
 
if ($archivo != '.' && $archivo != '..'){//Omitimos los archivos del sistema . y ..
 
$nuevaRuta = $directorio.$archivo.'/';//Creamos unaruta con la ruta anterior y el nombre del archivo actual 
 
echo '<li>'; //Abrimos un elemento de lista 
 
if (is_dir($nuevaRuta)) { //Si la ruta que creamos es un directorio entonces:
echo '<b>'.$nuevaRuta.'</b>'; //Imprimimos la ruta completa resaltandola en negrita
listFiles($nuevaRuta);//Volvemos a llamar a este metodo para que explore ese directorio.
 
} else { //si no es un directorio:
 
echo 'Archivo: '.$archivo; //simplemente imprimimos el nombre del archivo actual
 
}
 
'</li>'; //Cerramos el item actual y se inicia la llamada al siguiente archivo
 
}
 
}//finaliza While
echo '</ul>';//Se cierra la lista
 
closedir($dir);//Se cierra el archivo
}
}else{//Finaliza el If de la linea 12, si no es un directorio valido, muestra el siguiente mensaje
echo 'No Existe el directorio';
}
}//Fin de la Función	
 
//Llamamos a la función y le pasamos el nombre de nuestro directorio.
listFiles("repositorio/");
?>



El problema es que ahora lo que necesito es que el usuario pueda descargar en su equipo cada uno de esos ficheros, es decir, que al pinchar en cada uno de ellos lance la descarga del mismo.

Alguna ayuda o sugerencia para poder mostrar los enlaces de descarga?

Gracias por anticipado
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de xve
Val: 3.943
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Listar links de descarga de archivos de un directorio.

Publicado por xve (6935 intervenciones) el 11/04/2016 15:39:06
Hola Angel, que tipo de archivos son?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Listar links de descarga de archivos de un directorio.

Publicado por Angel Luis (19 intervenciones) el 11/04/2016 15:59:10
Hola,

Pues son archivos de Microsoft Office y archivos pdf.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve
Val: 3.943
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Listar links de descarga de archivos de un directorio.

Publicado por xve (6935 intervenciones) el 11/04/2016 19:36:22
Los archivos pdf, por defecto los abre el navegador....

Para que esto no ocurra, es un poco liado, ya que tienes que modificar las cabeceras del navegador para indicar que es adjunto... te pongo un ejemplo:
1
2
3
4
5
6
7
8
9
10
<?php
$filename="/var/www/archivo.pdf";
 
$finfo=finfo_open(FILEINFO_MIME_TYPE);
$mimeType=finfo_file($finfo, $filename);
 
header("Content-type:".$mimeType);
header("Content-Disposition: attachment; filename=Nombrearchivo.pdf");
echo file_get_contents($filename);
?>

Coméntanos, ok?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Listar links de descarga de archivos de un directorio.

Publicado por Angel Luis (19 intervenciones) el 11/04/2016 20:17:44
Hola,
Gracias de nuevo por tu respuesta.

Ummmmm, perdona, pero creo que no me he explicado bien, disculpame.
El asunto es que tengo esta función que lo que me hace es listar en pantalla todos los archivos que están dentro del directorio /repositorio del ftp donde tengo alojado mi site en php contra MySQL:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<?php
//Creamos Nuestra Función
function listFiles($directorio){ //La función recibira como parametro un directorio
if (is_dir($directorio)) { //Comprobamos que sea un directorio Valido
if ($dir = opendir($directorio)) {//Abrimos el directorio
 
echo '<ul>'; //Abrimos una lista HTML para mostrar los archivos
 
while (($archivo = readdir($dir)) !== false){ //Comenzamos a leer archivo por archivo
 
if ($archivo != '.' && $archivo != '..'){//Omitimos los archivos del sistema . y ..
 
$nuevaRuta = $directorio.$archivo.'/';//Creamos unaruta con la ruta anterior y el nombre del archivo actual 
 
echo '<li>'; //Abrimos un elemento de lista 
 
if (is_dir($nuevaRuta)) { //Si la ruta que creamos es un directorio entonces:
echo '<b>'.$nuevaRuta.'</b>'; //Imprimimos la ruta completa resaltandola en negrita
listFiles($nuevaRuta);//Volvemos a llamar a este metodo para que explore ese directorio.
 
} else { //si no es un directorio:
 
echo 'Archivo: '.$archivo; //simplemente imprimimos el nombre del archivo actual
 
}
 
'</li>'; //Cerramos el item actual y se inicia la llamada al siguiente archivo
 
}
 
}//finaliza While
echo '</ul>';//Se cierra la lista
 
closedir($dir);//Se cierra el archivo
}
}else{//Finaliza el If de la linea 12, si no es un directorio valido, muestra el siguiente mensaje
echo 'No Existe el directorio';
}
}//Fin de la Función	
 
//Llamamos a la función y le pasamos el nombre de nuestro directorio.
listFiles("repositorio/");
?>


Pues bien, como te comentaba, con esta función muestro en pantalla unicamente los nombres de esos archivos, algo tal que así:

repositorio/abril 2016/
Archivo: Factura1.pdf
Archivo: Factura2.pdf
Archivo: Proveedor.txt
Archivo: Factura3.pdf
Archivo: Factura4.pdf


Pero SOLO muestra los nombres, y lo que necesito es que muestre esos nombres de ficheros y que al hacer clic en cada uno de ellos se descargue en el ordenador del cliente dicho documento (los .pdf los muestra igualmente tal cual, solo el nombre, no los abre el navegador, ninguno de los ficheros trae asociado el hipervínculo a su ubicación en el server.


Espero haberme explicado un poco mejor.
A ver si así con esto me podeis ayudar.

Gracias de nuevo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de VRM
Val: 152
Ha disminuido su posición en 6 puestos en PHP (en relación al último mes)
Gráfica de PHP

Listar links de descarga de archivos de un directorio.

Publicado por VRM (192 intervenciones) el 12/04/2016 06:24:15
Hola:

En la linea 23, donde muestras el nombre del archivo, ponle un link al archivo:

1
2
$ruta_archivo = $directorio.$archivo."/";
echo "<a href='$ruta_archivo'>Archivo: $archivo</a>";

Saludos de Víctor.-
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Listar links de descarga de archivos de un directorio.

Publicado por Angel Luis (19 intervenciones) el 12/04/2016 09:27:15
Hola VRM, gracias por tu respuesta,

Efectivamente, ahora si que me muestra cada archivo con un hipervínculo a la ruta del mismo, pero lo cuirioso es que si pincho cualquiera de ellos NO me descarga el archivo en sí sino que lo que hace es redireccionarme siempre a la página index del site, pero en la barra de direcciones muestra dicho enlace de descarga, y sin embargo el archivo no se descarga y en pantala tengo el contenido de index.php..........................

Sabeis que me puede faltar? La verdad es que me parece extrañisimo.......

Gracias de nuevo por vuestra ayuda.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

[SOLUCIONADO]Listar links de descarga de archivos de un directorio.

Publicado por Angel Luis (19 intervenciones) el 12/04/2016 12:46:56
Hola de nuevo,

Solucionado. Quitando la "/" que está al final de la 1ª línea de código que amablemente me ha pasado VRM ya se descargan y abren todos los archivos con total normalidad.

Tiene que quedar así:

$ruta_archivo = $directorio.$archivo


Gracias de nuevo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

[SOLUCIONADO]Listar links de descarga de archivos de un directorio.

Publicado por Angel Luis (19 intervenciones) el 12/04/2016 18:47:52
Hola de nuevo,

Sería posible que al pinchar en los enlaces relativos a archivos estos se abrieran en una nueva ventana? Con este código me los abre en la misma ventana que el site, y claro, muchos de los usuarios pierden el control de la navegación.

Gracias de nuevo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Felix
Val: 47
Ha disminuido su posición en 26 puestos en PHP (en relación al último mes)
Gráfica de PHP

[SOLUCIONADO]Listar links de descarga de archivos de un directorio.

Publicado por Felix (32 intervenciones) el 13/04/2016 00:36:29
Saludos Angel Luis.

Solo debes usar target="_blank" mas o menos así:

1
2
$ruta_archivo = $directorio.$archivo."/";
echo "<a href='$ruta_archivo' target="_blank">Archivo: $archivo</a>";

Espero te sirva.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

[SOLUCIONADO]Listar links de descarga de archivos de un directorio.

Publicado por Angel Luis (19 intervenciones) el 13/04/2016 09:25:22
Hola Felix, gracias por tu ayuda.

Que va, ya había probado a añadir target"_blank" tal cual me dices, y nada, ahora me da error y ni siquiera carga la página.

Alguna otra ayuda o sugerencia?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Felix
Val: 47
Ha disminuido su posición en 26 puestos en PHP (en relación al último mes)
Gráfica de PHP

[SOLUCIONADO]Listar links de descarga de archivos de un directorio.

Publicado por Felix (32 intervenciones) el 13/04/2016 15:05:03
Si, es que al _blank debes colocarle comillas simples, disculpa se me pasó y creo que es mejor unir los pedazos de código con punto. Seria algo así:

1
2
$ruta_archivo = $directorio.$archivo."/";
echo "<a href='".$ruta_archivo."' target='_blank'>Archivo: ".$archivo."</a>";

Espero te funcione
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

[SOLUCIONADO]Listar links de descarga de archivos de un directorio.

Publicado por Angel Luis (19 intervenciones) el 13/04/2016 18:18:42
Hola Felix,

Funcionó a la perfección.
Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

[SOLUCIONADO]Listar links de descarga de archivos de un directorio.

Publicado por Hans (2 intervenciones) el 25/03/2018 23:47:04
Me sirivio este tema.
GRacias
Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

[SOLUCIONADO]Listar links de descarga de archivos de un directorio.

Publicado por antony (1 intervención) el 01/08/2019 01:25:29
Buen aporte, Felix
Codigo Final:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?php
//Creamos Nuestra Función
function listFiles($directorio){ //La función recibira como parametro un directorio
if (is_dir($directorio)) { //Comprobamos que sea un directorio Valido
if ($dir = opendir($directorio)) {//Abrimos el directorio
echo '<ul>'; //Abrimos una lista HTML para mostrar los archivos
while (($archivo = readdir($dir)) !== false){ //Comenzamos a leer archivo por archivo
if ($archivo != '.' && $archivo != '..'){//Omitimos los archivos del sistema . y ..
$nuevaRuta = $directorio.$archivo.'/';//Creamos unaruta con la ruta anterior y el nombre del archivo actual 
echo '<li>'; //Abrimos un elemento de lista 
if (is_dir($nuevaRuta)) { //Si la ruta que creamos es un directorio entonces:
echo '<b>'.$nuevaRuta.'</b>'; //Imprimimos la ruta completa resaltandola en negrita
listFiles($nuevaRuta);//Volvemos a llamar a este metodo para que explore ese directorio.
} else { //si no es un directorio: 
//echo 'Archivo: '.$archivo; //simplemente imprimimos el nombre del archivo actual
$ruta_archivo = $directorio.$archivo."";
echo "<a href='$ruta_archivo' target='_blank'>Archivo: $archivo</a>";
}
'</li>'; //Cerramos el item actual y se inicia la llamada al siguiente archivo
}
}//finaliza While
echo '</ul>';//Se cierra la lista 
closedir($dir);//Se cierra el archivo
}
}else{//Finaliza el If de la linea 12, si no es un directorio valido, muestra el siguiente mensaje
echo 'No Existe el directorio';
}
}//Fin de la Función	 
//Llamamos a la función y le pasamos el nombre de nuestro directorio.
listFiles("repositorio/");
?>


una consulta Felix, tendras un ejemplo con subir, listar, modificar, eliminar y descargar archivos en pdf o excel con base
de datos mysql.

quedo atento a tus comentarios.
Gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Listar links de descarga de archivos de un directorio.

Publicado por jhon bohorquez (1 intervención) el 24/09/2019 18:33:07
en seguida de la linea 23 agregamos :

?><a download="<?php echo $archivo ?>" href="repositorio/<?php echo $archivo ?>"><?php

hay te queda como hipervinculo y al darle clic te los deja descargar
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar