3,3Mil
AVISO: Esta entrada tiene más de dos años desde su publicación. Es posible que el contenido esté desactualizado.
En el post de hoy voy a dejar aquí colgado un pequeño código en el que se desarrolla un navegador de archivos creado con PHP. Trabajar con archivos y sus cosas en php se parece horriblemente a como trabajar con archivos con Python. No se trata de algo muy elaborado ni demasiado bonito. Pero después de haberlo probado más de una y de dos veces en un servidor local, puedo decir que funciona correctamente.
Actualmente lo único que hace es mostrar un listado de los archivos y directorios que encuentre. En principio en la carpeta dónde se encuentre nuestro archivo .php. Nos permitirá movernos por toda la estructura de directorios que tengamos.
Creando un navegador con PHP
<?php
//Funciones:
//pon_url
//es_directorio
/******/
//las imagenes que se usan vienen dentro de xampp en el directorio icons. Fuera de htdocs.
//Función para establecer la dirección correcta
function pon_url($un_dir, $un_item) {
$ini_etiq = "<a href='${_SERVER["PHP_SELF"]}?nuevo_dir"; //la primera parte de la dirección
$fin_etiq = "</a><br>";
if ($un_item == "..") { //en caso de que $un_item sea ..
//contamos hasta 1
if (substr_count($un_dir, "/") >= 1) {
$un_dir = strtr(dirname($un_dir), "\\", "/"); // Win devuelve '/'
//acabamos de formar la dirección con esta segunda parte y la imagen de los dos puntos
echo "<img src='/icons/back.gif'>$ini_etiq=$un_dir'><font size=+2>..</font>$fin_etiq";
}
} else { //si $un_item no es ..
if ($un_dir == "/") { //preguntamos si $un_dir es la raíz
//formamos la url con esta segunda parte de la url y su correspondiente icono
echo "<img src='/icons/folder.gif'>$ini_etiq=/$un_item'>$un_item$fin_etiq";
} else {
//se forma la dirección con esta segunda parte de la url y su icono.
//la / aparece enmedio de $un_dir y $un_item
echo "<img src='/icons/folder.gif'>$ini_etiq=$un_dir/$un_item'>$un_item$fin_etiq";
}
}
}
// en windows no puede haber un nombre de directorio con dos '/' esto '//' está mal
function es_directorio($un_dir, $un_item) { //recibe dos parámetros
if ($un_dir == '/') { //si $un_dir es /
//se le antepone / al nombre del item ya que es la raíz del la estrucutra
//de directorios
$fich_a_preguntar = "/$un_item";
} else { //sinó es / suponemos que no es la raíz de la estructura de directorios
//y por eso / separará el nombre del directorio del nombre del item
$fich_a_preguntar = "$un_dir/$un_item";
}
return (is_dir("$fich_a_preguntar")); //devolvemos true o false según sea o no un directorio
}
if (isset($_GET['nuevo_dir'])) {
$nuevo_dir = $_GET['nuevo_dir'];
} else { // es la primera vez que se ejecuta el script
$nuevo_dir = getcwd(); //getcwd nos devuelve el directorio actual de trabajo
if (isset($_SERVER["WINDIR"])) {
$nuevo_dir = substr($nuevo_dir, 2); // quitamos las 2 letras de la unidad
$nuevo_dir = strtr($nuevo_dir, "\\", "/"); //cambiamos las \\ por /
}
}
//mostramos la nueva url de la dirección eb ka parte superior
echo "<h2>CARPETA: <i>$nuevo_dir</i></h2>";
//si no se puede abrir el directorio ($nuevo_dir) se muestra el mensaje, sinó se pasa al while.
//se abre el directorio con el comando opendir
if (!$df_dir = opendir($nuevo_dir)) {
die("<h3>*** ERROR: no se ha podido entrar en ($nuevo_dir)</h3>");
}
//si se puede leer el directorio se hace el while
while (($item = readdir($df_dir)) !== false) {
if ($item == ".") { //en caso de que $item sea . se salta a la siguiente iteración del bucle
continue;
}
if (es_directorio($nuevo_dir, $item)) {
//si la función es_directorio devuelve true se le pasan los parámetros
//$nuevo_dir e $item a la función pon_url
pon_url($nuevo_dir, $item);
} else {
//en caso de que el item sea un archivo se le añade el incono generic.
echo "<img src='/icons/generic.gif'>$item<br>";
}
}
closedir($df_dir); //cerramos el directorio
?>
