Foros del Web » Programando para Internet » PHP »

Eliminar archivos de carpeta

Estas en el tema de Eliminar archivos de carpeta en el foro de PHP en Foros del Web. HOla: Tengo un script para recorrer una carpeta y mostrar todos los archivos. El código es este: Código PHP: <?php  $dir  =  "fotos/" ;   ...
  #1 (permalink)  
Antiguo 14/01/2005, 15:19
Avatar de Reynier  
Fecha de Ingreso: noviembre-2002
Ubicación: Por ahí en algún sitio
Mensajes: 1.844
Antigüedad: 21 años, 5 meses
Puntos: 1
Eliminar archivos de carpeta

HOla:
Tengo un script para recorrer una carpeta y mostrar todos los archivos. El código es este:
Código PHP:
<?php
 $dir 
"fotos/";
 
$i $b 0;
 if(
is_dir($dir)){
  if(
$ab opendir($dir)){
   while((
$file readdir($ab)) !== false){
    
$ac str_replace(" ","",$file);
    if(!
is_dir($file)){
     
$i += 1;
     
$extension explode(".",$file);
     
$dest "_blank";
     
$num count($extension)-1;
     
$extension[$num] = strtolower($extension[$num]);
     if ((
$extension[$num]!="jpg")&&($extension[$num]!= "gif")&&($extension[$num]!="php")&&($extension[$num]!="htm")&&($extension[$num]!= "html")&&($extension[$num]!="mp3")&&($extension[$num]!="wav")&&($extension[$num]!="txt")){
      
$extension[$num] = "dist";
     }
     echo 
"<tr>"
           
."<td>$extension[$num]</td>"
           
."<td><a href=../fotos/$ac target=$dest>$file</a></td>"
           
."<td><input type=\"checkbox\" value=\"$i\" name=\"$i\"></td>"
          
."</tr>";
    }elseif(
is_dir($file)){
     
$b += 1;
     echo 
"<tr>"
           
."<td>dir</td>"
           
."<td><B>$file</B></td>"
           
."<td align=right>CARPETA</td>"
           
."<td>&nbsp;</td>"
           
."</tr>";
    }
   }
  
closedir($ab);
  }
 }
 echo 
"La carpeta contiene: <B>$i </B> archivos y <B>$b </B> directorios<br><br>";
?>
si se dan cuenta cada imagen tiene un checkbox. Bueno lo que quiero hacer es que cuando de click en el botón eliminar archivos pues se me borren del directorio todos los que tienen el checkbox marcado. Me dan alguna idea o mano ?

Salu2
__________________
Ing. Reynier Pérez Mira
  #2 (permalink)  
Antiguo 14/01/2005, 15:35
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 19 años, 5 meses
Puntos: 34
ahi estas llamando a cada check con un nombre diferente. Lo que tenes que hacer es llamarlos por ejemplo asi:
echo '<td><input type="checkbox" value="'.$ac.'" name="imagenes[]"></td>" ;
Si esto lo encerras en un form, cuado lo envies tendras un vector con las imagenes seleccionadas, las cuales, por medio de un foreach podes recorrer y borrar con unlink().
Igual no entendi bien lo que haces, o sea, a $ac le haces :" $ac = str_replace(" ","",$file); ", y lo ingresas como link, lo cual no es correcto, ya que si tiene un espacio el file no lo encontrara.
Intenta con eso, cualquier cosa pregunta.
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #3 (permalink)  
Antiguo 14/01/2005, 18:51
Avatar de Reynier  
Fecha de Ingreso: noviembre-2002
Ubicación: Por ahí en algún sitio
Mensajes: 1.844
Antigüedad: 21 años, 5 meses
Puntos: 1
Pues algo no entiendo

En primera este código no es mío. Fue un amigo que me lo mando por correo y me dijo se lo corrigiera e hiciera el borrado de los archivos. Lo de los checkbox ya entendí como hacerlo pues de esa forma tendría un arreglo con los checkbox en la variable imagenes[].

Ahora no se porque pones esto de esta forma:
Código PHP:
echo '<td><input type="checkbox" value="'.$ac." name="imagenes[]"></td>" 
y no como yo lo pondría
Código PHP:
echo '<td><input type="checkbox" value="'.$i." name="imagenes[]"></td>" 
pues $ac en este caso sería el nombre del fichero que me imagino que el lo haya hecho así para lograr esto: si la imagen se llama imagen 20.jpg cambiarla por este imagen20.jpg.

Lo del ciclo foreach te pediría si no fuese mucho me dieras una mano pues no se trabajar muy bien con el.

Y por último como puedo chequear que checkbox se haya activado y cual no para entonces poder hacer el unlink de los files correspondientes?

Salu2
__________________
Ing. Reynier Pérez Mira
  #4 (permalink)  
Antiguo 15/01/2005, 07:55
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 19 años, 5 meses
Puntos: 34
Dos cosas: Una, he visto en otro post también, que reemplazan los archivos que tienen espacios por el mismo sin espacion. SI tenes
archivo mio.jpg
te quedaria
archivomio.jpg
Esto es un error que no comprendo...donde van a encontrar a archivomio.jpg si este no existe???? el archivo que existe es archivo mio.jpg. La conclucion, no tenes que reemplazar nada, en todo caso, si queres tener almacenados archivos sin espacios o lo que sea, esa nomenclatura tenes que definirla al subir los mismos, sea por ftp, o por medio de un upload php.
Por eso es que me parecio que $ac era el file, pero que ese reemplazo estaba mal.
En si, vos tendrás que poner en el value, para no repetir procesos, el nombre REAL del archivo, vos sabras cual es.
Una vez que hagas eso, el vector que se envia esta formado unicamente por los check marcados.
O sea, del otro lado, si lo pasaras por post, deverias hacer esto:
Código PHP:
<?php
$files 
= isset($_POST["imagenes"])?$_POST["imagenes"]:'';
 if(
is_array($files)){
  foreach(
$files as $queBorro){
   if(
file_exists($queBorro)){
    
unlink($queBorro);
    echo 
"Se ha borrado ".$queBorro;
  }else{
   echo 
$queBorro "no existe";
  }
 }
}
?>
Culquier cosa pregunta.
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #5 (permalink)  
Antiguo 07/02/2005, 00:22
Avatar de Reynier  
Fecha de Ingreso: noviembre-2002
Ubicación: Por ahí en algún sitio
Mensajes: 1.844
Antigüedad: 21 años, 5 meses
Puntos: 1
Pues sip

Ya entendí que es lo que me dices. Está correcta tu aclaración lo que pasa es que no había leído muy bien.
Gracias
__________________
Ing. Reynier Pérez Mira
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.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:08.