En muchas ocasiones podemos querer listar los archivos de un directorio de nuestro servidor con PHP, bien sea para mostrar el resultado por pantalla o para procesarlo de algún modo. El proceso se base en preguntar a nuestro sistema operativo por los archivos o directorios deseados y mostrarlos por pantalla, algo para lo que PHP nos provee de ciertas funciones específicas.
Vamos a ver una función que extrae los nombres de los archivos y otras propiedades de los archivos de un directorio.
Función para listar archivos de un directorio
function obtenerListadoDeArchivos($directorio){
// Array en el que obtendremos los resultados
$res = array();
// Agregamos la barra invertida al final en caso de que no exista
if(substr($directorio, -1) != "/") $directorio .= "/";
// Creamos un puntero al directorio y obtenemos el listado de archivos
$dir = @dir($directorio) or die("getFileList: Error abriendo el directorio $directorio para leerlo");
while(($archivo = $dir->read()) !== false) {
// Obviamos los archivos ocultos
if($archivo[0] == ".") continue;
if(is_dir($directorio . $archivo)) {
$res[] = array(
"Nombre" => $directorio . $archivo . "/",
"Tamaño" => 0,
"Modificado" => filemtime($directorio . $archivo)
);
} else if (is_readable($directorio . $archivo)) {
$res[] = array(
"Nombre" => $directorio . $archivo,
"Tamaño" => filesize($directorio . $archivo),
"Modificado" => filemtime($directorio . $archivo)
);
}
}
$dir->close();
return $res;
}
La variable $_SERVER[‘DOCUMENT_ROOT’] se corresponde al directorio raíz de tu página web, que suele ser el directorio ./var/www/public_html, aunque en caso de haber varias cuentas de usuario o varios hosts virtuales también puede ser otro directorio que depende de la configuración de nuestro servidor o del panel de hosting que utilicemos.
El valor devuelto por la función contendrá un array con todos los archivos, y cada archivo está reprensentado mediante un array asociativo que contiene el nombre, el tamaño y la última fecha de modificación de cada archivo o directorio.
Vamos a mostrar el array por pantalla usando al función recursiva print_r:
print_r($listadoArchivos);
Esta función imprimirá por pantalla algo como el siguiente ejemplo:
Array (
[0] => Array
(
[Nombre] => mi_directorio/fondo.jpg
[Tamaño] => 86920
[Modificado] => 1077461701
)
[1] => ...
(
[Nombre] => mi_directorio/recursos.pdf
[Tamaño] => 86920
[Modificado] => 1077461701
)
[2] => ...
)
También podemos mostrar el resultado de un modo más bonito utilizando HTML y CSS, pero no es el objetivo de esta guía, así que os lo dejo a vosotros. Ahora vamos a ver otra función para listar los archivos de un directorio y de los directorios que existan dentro del mismo de un modo rescursivo.
Función para listar archivos de un directorio recursivamente
Usaremos la misma función pero le pasaremos un parámetro adicional para definir si recorreremos recursivamente o no el directorio que le pasemos como primer parámetro. También se comprobará que los directorios puedan leerse antes de listar sus archivos, para lo que se invocará de nuevo la misma función.
function obtenerListadoDeArchivos($directorio, $recursivo=false){
// Array en el que obtendremos los resultados
$res = array();
// Agregamos la barra invertida al final en caso de que no exista
if(substr($directorio, -1) != "/") $directorio .= "/";
// Creamos un puntero al directorio y obtenemos el listado de archivos
$dir = @dir($directorio) or die("getFileList: Error abriendo el directorio $directorio para leerlo");
while(($archivo = $dir->read()) !== false) {
// Obviamos los archivos ocultos
if($archivo[0] == ".") continue;
if(is_dir($directorio . $archivo)) {
$res[] = array(
"Nombre" => $directorio . $archivo . "/",
"Tamaño" => 0,
"Modificado" => filemtime($directorio . $archivo)
);
if($recursivo && is_readable($directorio . $archivo . "/")) {
$directorioInterior= $directorio . $archivo . "/";
$res = array_merge($res, obtenerListadoDeArchivos($directorioInterior, true));
}
} else if (is_readable($directorio . $archivo)) {
$res[] = array(
"Nombre" => $directorio . $archivo,
"Tamaño" => filesize($directorio . $archivo),
"Modificado" => filemtime($directorio . $archivo)
);
}
}
$dir->close();
return $res;
}
La única diferencia ahora, tendremos arrays adicionales para cada directorio, siempre y cuando haya podido leerse su contenido.
buenas tardes ingeniero, me podias guiar que plugin puedo usar para mostrar los archivos de un directorio y poder manejarlos, o sea descargar, borrar, etc, esto en una pagina Wp, utilizo la plantilla twenty seventeen… Soy nuevo en este tema de WP y agradeceré tu ayuda…
Demasiado codigo, mejor usar la funcion glob que recupera la informacion de un directorio pasado por parametro y la regresa en forma de un arreglo
<?php
$cmd="ls *.*";
$cadena=shell_exec($cmd);
$arreglo=explode(" ",$cadena);
for( $i=1; $i
$cmd=»ls *.*»; //orden de listado de archivos
$cadena=shell_exec($cmd); //ejecutar el comando, salida en variable
$arreglo=explode(» «,$cadena); //resultado en un arreglo
for( $i=1; $i<count($arreglo); $i++) //listando arreglo
{ echo $i."- ".$arreglo[$i]."»; }