PHP:¿Cómo puedo listar el contenido de una carpeta en mi webserver para la gente pueda descargar archivos?
De Foros del Web
Creá un index.php, con el siguiente contenido, y pongo en el directorio que desees (este script permite entrar en los subdirectorios pero no ir más atrás del directorio 'root')
Código PHP:
<? header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); header("Cache-Control: no-store, no-cache, must-revalidate"); header("Cache-Control: post-check=0, pre-check=0", false); header("Pragma: no-cache"); ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <title>Explorando /<? echo $_GET['ruta']; ?></title> </head> <body> <pre> <? if (empty($_GET['ruta']) || ereg("^\.", $_GET['ruta'])) { $dir = './'; } else { $dir = $_GET['ruta']; } if (is_dir($dir)) { function tamano($bytes) { $largo = strlen($bytes); if ($largo < 4) { $divisor = 1; $unidad = 'B'; } else if ($largo > 3 && $largo < 7) { $divisor = 1024; $unidad = 'KB'; } else if ($largo > 6 && $largo < 10) { $divisor = pow(1024, 2); $unidad = 'MB'; } else if ($largo > 9 && $largo < 12) { $divisor = pow(1024, 3); $unidad = 'GB'; } else { $divisor = pow(1024, 4); $unidad = 'TB'; } $salida[0] = round(($bytes / $divisor), 2); $salida[1] = $unidad; return $salida; } $gd = opendir($dir); if ($gd) { $rn = "\r\n"; while (($archivo = readdir($gd)) !== false) { if (ereg("^(.)*\.[a-zA-Z0-9]{1,3}$", $archivo)) { if ($archivo == 'index.php') { break; } $extension = strtolower(substr($archivo, -3)); switch ($extension) { case 'mp3': case 'wma': $icono = 'snd'; break; case 'jpg'; case 'tif'; case 'png'; $icono = 'pic'; break; default: $icono = 'unk'; break; } $iconos [] = $icono; $archivos[] = $archivo; $fechas[] = $fecha; $tamanos[] = tamano(filesize($dir.$archivo)); } else if ($archivo != '.' && $archivo != '..') { $carpetas[] = $archivo; } } closedir($gd); if ($dir != '.') { $ruta = explode('/', $_GET['ruta']); $tot_subdir = count($ruta) - 2; krsort($ruta); $volver = '<img src="bck.png"> <a href="?ruta='; for ($i = 0; $i < $tot_subdir; $i++) { $volver .= $ruta[$i].'/'; } $volver .= '">volver</a>'.$rn; echo $volver; } if (is_array($carpetas)) { natcasesort($carpetas); foreach ($carpetas as $valor) { echo '<img src="fol.png"> <a href="?ruta='.$_GET['ruta'].urlencode($valor).'/">'.$valor.'</a> '.$rn; } } if (is_array($archivos)) { if (natcasesort($archivos)) { foreach ($archivos as $clave => $valor) { echo '<img src="'.$iconos[$clave].'.png"> <a href="'.$dir.urlencode($valor).'">'.$valor.'</a> '; printf("%6.2f ", $tamanos[$clave][0]); echo $tamanos[$clave][1]; echo $rn; } } } } } else { echo 'El directorio \''.$dir.'\' no es válido.'; } ?> </pre>
--nachopro 09 Jun 2006
Este artículo es parte de las FAQs de PHP y el Manual de PHP.
- Indice de las FAQs: Conceptos, Configuración, Formularios, Manejo de Archivos, Integración con Bases de Datos, Sesiones, Extensiones y Librerías, Seguridad, Funciones, Clases y Objetos, Frameworks
- Recomendamos también: Guía Zend, Frameworks PHP, Aceleradores PHP
- Agregar al FAQ: PHP: Instrucciones para agregar una pregunta al FAQ de PHP
- Para preguntas sobre PHP: Foro de Php
