Ver Mensaje Individual
  #11 (permalink)  
Antiguo 13/01/2007, 12:36
Avatar de holahola
holahola
 
Fecha de Ingreso: mayo-2005
Ubicación: Móstoles - (Madrid)
Mensajes: 214
Antigüedad: 19 años
Puntos: 1
Re: SOLUCIONADO--Listar contenido de carpeta y borrar archivos

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.

Última edición por holahola; 13/01/2007 a las 12:51 Razón: añadir el enlace del break