Hola alllebor: creo que hay un error en el código (en el código original).
Se trata del punto 2 que comenta
phidalgo:
Cita: 2-Qué hace la linea: if ($archivo == 'explorar.php') { break; } ...o mejor dicho, cual es la función del archivo 'explorar.php' ???. Porque se supone que solo habian dos archivos: buscar.php y borrar.php
Supongo que te ha quedado del script que lo sacaste de la FAQ y deberías de sustituir 'explorar.php' por 'buscar.php'. Se trata de una medida de seguridad para que no se ejecute dicho php. Pero cuidado... resulta que lo que el break hace es, si se cumple la condición, sacarte del bucle while. Como resultado de ello, puede que haya ficheros que no muestres (aquellos que por su nombre alfábetico sean mayor de 'buscar.php').
http://es2.php.net/manual/es/control...ures.break.php
De todas formas creo que es un fallo de seguridad el que aceptes que se muestren ficheros tales como '.php' porque si les haces clic se pueden ejecutar. Lo que se debería de ignorar es todos los archivos que tienen extensión php
(ten en cuenta que tu también tienes el borrar.php). Yo lo haría así:
Tu bucle while, en vez de:
Código PHP:
while (($archivo = readdir($gd)) !== false) {
if (ereg("^(.)*\.[a-zA-Z0-9]{1,3}$", $archivo)) {
if ($archivo == 'explorar.php') { break; }
$extension = strtolower(substr($archivo, -3));
//Para diferente extension diferente icono a mostrar. Añade las que quieras.
switch ($extension) {
case 'mp3':
case 'wma':
$icono = 'snd';
break;
case 'doc':
case 'txt':
$icono = 'word';
break;
case 'pdf':
$icono = 'pdf';
break;
case 'php':
case 'htm':
$icono = 'web';
break;
case 'jpg';
case 'gif';
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;
}
}
deberías de sustituirlo por:
Código PHP:
while (($archivo = readdir($gd)) !== false) {
if (ereg("^(.)*\.[a-zA-Z0-9]{1,3}$", $archivo)) {
//-en teoría, el siguiente if trata de no sacar el index.php
// pero realmente se trata de un error, porque si hay ficheros
// después del index.php, NO LOS SACA, porque el break SACA
// DEL while. LO CAMBIO POR UN IF () ELSE
//if ($archivo != 'index.php') { break; }
//if ($archivo != 'index.php') {
//-POR SEGURIDAD, es mejor no sacar ningún php
$extension = strtolower(substr($archivo, -3));
if ($extension != 'php') {
//Para diferente extension diferente icono a mostrar. Añade las que quieras.
switch ($extension) {
case 'mp3':
case 'wma':
$icono = 'snd';
break;
case 'doc':
case 'txt':
$icono = 'word';
break;
case 'pdf':
$icono = 'pdf';
break;
case 'php':
case 'htm':
$icono = 'web';
break;
case 'jpg';
case 'gif';
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;
}
}
Por supuesto el case 'php' ya no tendría mucho sentido.
Probablemente, la persona que hizo originalmente el script (y que lo llamo 'explorar.php') sabía que el único php que había en ese directorio era ese, por lo que su if para ignorarlo estaba "bien". Pero por otro lado, el break tampoco era la salida correcta.
Un saludo.