Foros del Web » Programando para Internet » PHP »

SOLUCIONADO--Listar contenido de carpeta y borrar archivos

Estas en el tema de SOLUCIONADO--Listar contenido de carpeta y borrar archivos en el foro de PHP en Foros del Web. Pues eso me gustaria hacer en mi web, una aplicaion que me listara el contenido de una carpeta en concreto que hay en mi servidor ...
  #1 (permalink)  
Antiguo 10/01/2007, 05:26
Avatar de alllebor  
Fecha de Ingreso: septiembre-2006
Mensajes: 295
Antigüedad: 17 años, 7 meses
Puntos: 1
SOLUCIONADO--Listar contenido de carpeta y borrar archivos

Pues eso me gustaria hacer en mi web, una aplicaion que me listara el contenido de una carpeta en concreto que hay en mi servidor y me diese la opcion de borrar dicho archivo, pero no se como hacerlo.

He buscado por internet y el tema de listar el contenido de un directorio lo tengo más o menos claro con este codigo

Código PHP:
<?php 
echo "<h3>Index</h3>\n"
echo 
"<table>\n"
$directorio opendir("."); 
while (
$archivo readdir($directorio))    
{   
$nombreArch ucwords($archivo);    
$nombreArch str_replace("..""Atras"$nombreArch);   echo "<tr>\n<td>\n<a href='$archivo'>\n";    
echo 
"<img src='./imagenes/carpeta.png' alt='Ver $nombreArch'";    
echo 
" border=0>\n";    
echo 
"<b>&nbsp;$nombreArch</b></a></td>\n";    
echo 
"\n</tr>\n";    

closedir($directorio);  
echo 
"</table>\n"
?>
Lo que no tengo ni idea es de borrar un archivo determinado.

ALguna sugerencia??
__________________
Quien no me pregunta no se entera!!

Última edición por alllebor; 11/01/2007 a las 04:33
  #2 (permalink)  
Antiguo 10/01/2007, 05:34
Avatar de alllebor  
Fecha de Ingreso: septiembre-2006
Mensajes: 295
Antigüedad: 17 años, 7 meses
Puntos: 1
Re: Listar contenido de carpeta y borrar archivos

He encontrado este codigo de FAQ link que es para listar carpetas y subcarpetas, que me gusta mas que el anterior, pero tengo el mismo porblema, quiero borrar archivos, me gustaria que en la lista me saliera un boton al lado de cada archivo para borrarlo. Pero no se como se puede borrar.
__________________
Quien no me pregunta no se entera!!
  #3 (permalink)  
Antiguo 10/01/2007, 16:56
 
Fecha de Ingreso: diciembre-2001
Mensajes: 24
Antigüedad: 22 años, 4 meses
Puntos: 0
Re: Listar contenido de carpeta y borrar archivos

La función en PHP para borrar archivos es unlink()

Debes tener los permisos necesarios.
__________________
Un saludo.
Guadiano
BizkaiWeb
  #4 (permalink)  
Antiguo 11/01/2007, 01:27
Avatar de alllebor  
Fecha de Ingreso: septiembre-2006
Mensajes: 295
Antigüedad: 17 años, 7 meses
Puntos: 1
Re: Listar contenido de carpeta y borrar archivos

Se ke es esa función,lo que no se como hacer un link para que ejecutar dicha funcion.

No se que codigo poner, para al hacer un link sobre el boton borrar, me ejecute el codigo de PHP con la funcion unkink()

gracias!!
__________________
Quien no me pregunta no se entera!!
  #5 (permalink)  
Antiguo 11/01/2007, 03:27
Avatar de holahola  
Fecha de Ingreso: mayo-2005
Ubicación: Móstoles - (Madrid)
Mensajes: 214
Antigüedad: 18 años, 11 meses
Puntos: 1
Re: Listar contenido de carpeta y borrar archivos

Como me hiciste la consulta por privado, te he contestado con un privado. Si te funciona, supongo que deberías publicarlo luego aquí. Un saludo.
  #6 (permalink)  
Antiguo 11/01/2007, 04:33
Avatar de alllebor  
Fecha de Ingreso: septiembre-2006
Mensajes: 295
Antigüedad: 17 años, 7 meses
Puntos: 1
Re: Listar contenido de carpeta y borrar archivos

Gracisa Holahola!! Si no fuera por ti ke haria yo??jejeje

ya lo he conseguido. Voy a poner el codigo por si ha alguien le sirve tambien!
Hay dos archivos (buscar.php y el borrar.php) y deben de estar en la carpeta donde querramos listar el contenido,ok??

buscar.php

Código PHP:
<!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 && $largo 7) { 
            
$divisor 1024
            
$unidad 'KB'
        } 
        else if (
$largo && $largo 10) { 
            
$divisor pow(10242); 
            
$unidad 'MB'
        } 
        else if (
$largo && $largo 12) { 
            
$divisor pow(10243); 
            
$unidad 'GB'
        } 
        else { 
            
$divisor pow(10244); 
            
$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 == '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
            } 
        } 
        
closedir($gd); 
         
        if (
$dir != '.') { 
            
$ruta explode('/'$_GET['ruta']); 
            
$tot_subdir count($ruta) - 2
            
krsort($ruta); 
            
$volver '<img src="iconos/bck.png"> <a href="?ruta='
            for (
$i 0$i $tot_subdir$i++) { 
                
$volver .= $ruta[$i].'/'
            } 
            
$volver .= '">volver</a>'.$rn
             
        } 
         echo 
'<h1><font face="Verdana" color="#FF9933">'.$dir.'</font></h1>';
         if (
$dir != '.') echo $volver;
         
        if (
is_array($carpetas)) { 
            
natcasesort($carpetas); 
            foreach (
$carpetas as $valor) { 
                echo 
'<img src="iconos/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/'.$iconos[$clave].'.png"> <a href="'.$dir.urlencode($valor).'">'.$valor.'</a>    ';
                    
printf("%6.2f "$tamanos[$clave][0]); 
                    echo 
$tamanos[$clave][1].'   ';
                    echo 
'<a href="./borrar.php?fichero='.$valor.'">Borrar</a>';
                    if (
$dir=='./'){
                    echo 
'<font face="Verdana">Link  <b><u>http://www.aer-ribera.com/coses/'.$valor.'</u></b></font>';
                    }
                    else{
                    echo 
'<font face="Verdana">Link  <b><u>http://www.aer-ribera.com/coses/'.$dir.$valor.'</u></b></font>'; }
                    echo 
$rn
                } 
            } 
        } 
    } 

else { 
    echo 
'El directorio \''.$dir.'\' no es v&aacute;lido.'.$rn;;
                
$volver '<img src="bck.png"> <a href="?ruta='
            for (
$i 0$i $tot_subdir$i++) { 
                
$volver .= $ruta[$i].'/'
            } 
            
$volver .= '">volver</a>'.$rn
            echo 
$volver;  

?> 
</pre>
borrar.php
Código PHP:
<?php
$fichero
=$_GET["fichero"];
//yo tengo el directorio aqui "web1/documentos/" vosotros cambiarlo al vuestro
$path=$_SERVER['DOCUMENT_ROOT']."web1/documentos/".$fichero;
unlink($path);
echo 
"<script> alert (\"Archivo borrado con éxito\"); </script>";
echo 
"<script language=Javascript> location.href=\"buscar.php\"; </script>";
?>
En la carpeta donde estan dichos archivos hay que darle estos permisos: 757.
Para alguna duda preguntar a ver si se contestar,jejeje.

GRACIAS HOLAHOLA!!!
__________________
Quien no me pregunta no se entera!!
  #7 (permalink)  
Antiguo 11/01/2007, 04:40
Avatar de holahola  
Fecha de Ingreso: mayo-2005
Ubicación: Móstoles - (Madrid)
Mensajes: 214
Antigüedad: 18 años, 11 meses
Puntos: 1
Re: SOLUCIONADO--Listar contenido de carpeta y borrar archivos

Por nada, alllebor.

Estoy seguro que, con un poquito más de tiempo, lo habrías sacado tu solito.

Un saludo, y hasta la próxima.
  #8 (permalink)  
Antiguo 11/01/2007, 04:49
Avatar de alllebor  
Fecha de Ingreso: septiembre-2006
Mensajes: 295
Antigüedad: 17 años, 7 meses
Puntos: 1
Re: SOLUCIONADO--Listar contenido de carpeta y borrar archivos

Es que no sabia como hacer el link y pasar la variable (<a href="./borrar.php?fichero='.$valor.'">) pero ahora ya he aprendido,jejejeje
Hasta la proxima!!
__________________
Quien no me pregunta no se entera!!
  #9 (permalink)  
Antiguo 11/01/2007, 04:53
Avatar de holahola  
Fecha de Ingreso: mayo-2005
Ubicación: Móstoles - (Madrid)
Mensajes: 214
Antigüedad: 18 años, 11 meses
Puntos: 1
Re: SOLUCIONADO--Listar contenido de carpeta y borrar archivos

Respecto al permiso 757 sobre el directorio, creo que sería más seguro el 770.

Pero es más seguro de la siguiente forma:

Cita:
chown para modificar el grupo del owner:
chown .www-data fichero
-el comando anterior asigna al grupo www-data el fichero
Si tu apache se instaló con el usuario www-data, la solución es asignar a tus directorios / ficheros el grupo www-data, y luego darles permisos de grupo rwx.

Lógicamente solo podrías hacerlo si tienes usuario linux y tienes permiso para hacer chown, si no lo tienes, podría valer el que pones o el 777, pero son más inseguros.

Un saludo.

Última edición por holahola; 11/01/2007 a las 09:18 Razón: aclaración www-data
  #10 (permalink)  
Antiguo 13/01/2007, 10:27
 
Fecha de Ingreso: enero-2007
Mensajes: 97
Antigüedad: 17 años, 3 meses
Puntos: 1
Re: SOLUCIONADO--Listar contenido de carpeta y borrar archivos

Hola, unas dudas que quizas puedan ser básicas:

1-Al poner <? echo $_GET['ruta']; ?> ...significa que hay un tercer archivo el cual se debe encargar de pasar la ruta del directorio?. Esto pues me aparece repetidamente "Notice: Undefined variable: ruta ...", al igual que para las variables fecha, carpetas y archivos.
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

Gracias por cualquier orientación
  #11 (permalink)  
Antiguo 13/01/2007, 12:36
Avatar de holahola  
Fecha de Ingreso: mayo-2005
Ubicación: Móstoles - (Madrid)
Mensajes: 214
Antigüedad: 18 años, 11 meses
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
  #12 (permalink)  
Antiguo 15/01/2007, 01:28
Avatar de alllebor  
Fecha de Ingreso: septiembre-2006
Mensajes: 295
Antigüedad: 17 años, 7 meses
Puntos: 1
Re: SOLUCIONADO--Listar contenido de carpeta y borrar archivos

Muchas gracias a los dos. La verdad que yo habia nombrado antes al script explorar.php y luego lo cambie de nombre y se me olvidó cambiarlo dentro del script.

En dicho script solo puede ejecutarlo los usuarios que se han registrado como administrador.

Código PHP:
<?
require("../autentificador/aut_verifica.inc.php");
$nivel_acceso=10// Nivel de acceso para esta página.
if ($nivel_acceso <= $_SESSION['usuario_nivel']){
header ("Location: ../autentificador/$redir?error_login=5");
exit;
}
?>
Ya que tengo este script de seguridad.
De todas formas por si las moscas ya he cambiado el codigo. Muchas gracias!!!
__________________
Quien no me pregunta no se entera!!
  #13 (permalink)  
Antiguo 15/01/2007, 03:42
Avatar de holahola  
Fecha de Ingreso: mayo-2005
Ubicación: Móstoles - (Madrid)
Mensajes: 214
Antigüedad: 18 años, 11 meses
Puntos: 1
Re: SOLUCIONADO--Listar contenido de carpeta y borrar archivos

Cita:
Iniciado por phidalgo Ver Mensaje
1-Al poner <? echo $_GET['ruta']; ?> ...significa que hay un tercer archivo el cual se debe encargar de pasar la ruta del directorio?. Esto pues me aparece repetidamente "Notice: Undefined variable: ruta ...", al igual que para las variables fecha, carpetas y archivos.
Alllebor: quedaba pendiente la primera duda que planteó phidalgo.

Yo no sé si el script buscar.php original tendría otro scrip que le llamara a su vez, pero lo que he comprobado es que de la forma que está hecho, te permite ver cualquier directorio de tu servidor. Por ejemplo:

Lo cual me ha parecido muy interesante: te permite explorar por todos los directorios del servidor.

Por lo tanto, y como respuesta a phidalgo, como puedes ver no es necesario que exista un script que llame a buscar.php y sin embargo, te proporciona el poder listar directorios distintos de los de por defecto.

Espero haberme explicado bien. Un saludo
  #14 (permalink)  
Antiguo 15/01/2007, 04:19
Avatar de alllebor  
Fecha de Ingreso: septiembre-2006
Mensajes: 295
Antigüedad: 17 años, 7 meses
Puntos: 1
Re: SOLUCIONADO--Listar contenido de carpeta y borrar archivos

Te has explicado muy bien.
Yo como lo tengo montado, ya que te tienes que loguear para acceder a buscar.php si pones esto http://www.tusitio.es/buscar.php?ruta=/home/ me salta un error del login (acceso no permitido) así me parece más seguro. Por que si el que se encarga de actualizar la pagina se mete por alguna carpeta y borra un archivo de la web ke no deberia borrar la cagaría. Asi solo les dejo que controle un directorio y sus subdirectorios.

Muchas gracias!
__________________
Quien no me pregunta no se entera!!
  #15 (permalink)  
Antiguo 15/01/2007, 04:42
 
Fecha de Ingreso: noviembre-2002
Mensajes: 273
Antigüedad: 21 años, 5 meses
Puntos: 0
Re: SOLUCIONADO--Listar contenido de carpeta y borrar archivos

Muy interesante este tema.

Me gustaría saber si podrían listar los directorios de otro equipo, es decir, listar los directorios que hay en otro servidor (poniendo si IP y ruta completa).

Muchas gracias,
Mickeyzgz
  #16 (permalink)  
Antiguo 15/01/2007, 12:24
 
Fecha de Ingreso: enero-2007
Mensajes: 97
Antigüedad: 17 años, 3 meses
Puntos: 1
Re: SOLUCIONADO--Listar contenido de carpeta y borrar archivos

Gracias a todos por sus disponibilidades de ayudar al principiante. Espero algún día yo tambien dar soluciones a dudas

Complementar que el "Notice: Undefined variable: ruta ..." que me salia era porque la variable "ruta" no estaba definida. Esto se evita configurando el "error_reporting=" en el php.ini (pero que en realidad es ignorar un error) o haciendo una correcta programación:

Código PHP:
if(isset($_GET[$ruta]) == true){
//código...

  #17 (permalink)  
Antiguo 23/07/2007, 16:08
 
Fecha de Ingreso: octubre-2006
Mensajes: 32
Antigüedad: 17 años, 6 meses
Puntos: 0
Re: SOLUCIONADO--Listar contenido de carpeta y borrar archivos

muchas gracias, me ha servido esto bastante.
ahora me gustaria hacer lo siguiente, solo listar los ficheros con las extensiones que yo elija.
quiero que solo muestre jpg, jpeg, y gif
y que no me mmuestre el thums.db.
me podeis ayudar? gracias. un saludo.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 13:38.