Foros del Web » Programando para Internet » PHP »

Borrar carpetas que no se hayan sido creadas anteriormente a un cierto tiempo

Estas en el tema de Borrar carpetas que no se hayan sido creadas anteriormente a un cierto tiempo en el foro de PHP en Foros del Web. Buenas! neceisto crear una función php, en la que antes de crear una carpeta, se compruebe las carpetas anteriormente creadas y se borren aquellas que ...
  #1 (permalink)  
Antiguo 16/11/2010, 03:21
 
Fecha de Ingreso: enero-2009
Mensajes: 45
Antigüedad: 15 años, 3 meses
Puntos: 0
Borrar carpetas que no se hayan sido creadas anteriormente a un cierto tiempo

Buenas!

neceisto crear una función php, en la que antes de crear una carpeta, se compruebe las carpetas anteriormente creadas y se borren aquellas que no han sido actualizadas en cierto tiempo (por ejemplo 5 dias).

Existe alguna función expire o similar?

Se puede implementar de alguna manera?


Un saludo!
  #2 (permalink)  
Antiguo 16/11/2010, 05:16
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: Borrar carpetas que no se hayan sido creadas anteriormente a un cierto tie

Eso lo logras más bien con un cron job.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #3 (permalink)  
Antiguo 16/11/2010, 06:11
 
Fecha de Ingreso: noviembre-2010
Mensajes: 13
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Borrar carpetas que no se hayan sido creadas anteriormente a un cierto tie

podrias usar filemtime que retorna ela fecha de la última modificación del directorio o del archivo.

ejemplo.

$modificado=filemtime('nombredeldirectorio);
$ahora=mjtime();
$dia=86400; // cantidad de segundos de un dia
$dia*=20; //suponiendo que quieres eliminarlo a los 20 días
if($ahora-$modificado>$dia) {
//elimino archivos dentro del directorio con unlink()
//elimino directorio con rmdir()
}
  #4 (permalink)  
Antiguo 16/11/2010, 06:21
 
Fecha de Ingreso: noviembre-2010
Mensajes: 13
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Borrar carpetas que no se hayan sido creadas anteriormente a un cierto tie

Ufa... hoy estoy para errar las teclas:

Corrección:

donde dice
$modificado=filemtime('nombredeldirectorio);
debe decir:
$modificado=filemtime('nombredeldirectorio');

donde dice
$ahora=mjtime();
debe decir:
$ahora=mktime();

Para eliminar los archivos del directorio puedes hacerte un loop que lea que archivos hay en el directorio y borrarlos:

if ($handle = opendir('nombredeldirectorio')) {
while ($file = readdir($handle)) {
unlik $file;
}
}
else
echo 'No pude abrir el directorio';

Otra cosa, ten en cuenta los permisos que tienes sobre directorio y archivos.

Espero que te sirva
  #5 (permalink)  
Antiguo 16/11/2010, 07:13
 
Fecha de Ingreso: enero-2009
Mensajes: 45
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: Borrar carpetas que no se hayan sido creadas anteriormente a un cierto tie

Cita:
Iniciado por abimaelrc Ver Mensaje
Eso lo logras más bien con un cron job.
Si, ya se que se puede metiendo una tarea en el servidor pero no me interesa hacerlo de forma periódica. Gracias de todas maneras por tu sugerencia!

Cita:
Iniciado por gandres Ver Mensaje
Ufa... hoy estoy para errar las teclas:

Corrección:

donde dice
$modificado=filemtime('nombredeldirectorio);
debe decir:
$modificado=filemtime('nombredeldirectorio');

donde dice
$ahora=mjtime();
debe decir:
$ahora=mktime();

Para eliminar los archivos del directorio puedes hacerte un loop que lea que archivos hay en el directorio y borrarlos:

if ($handle = opendir('nombredeldirectorio')) {
while ($file = readdir($handle)) {
unlik $file;
}
}
else
echo 'No pude abrir el directorio';

Otra cosa, ten en cuenta los permisos que tienes sobre directorio y archivos.

Espero que te sirva
Lo he probado y no me funciona....


Al final lo que he hecho es esto:

Código PHP:
<?php
function vartime($filepath){
$filet=filemtime($filepath);
$actualt=time();

// define filetime
$yearf=date('Y',$filet);
$monthf=date('n',$filet);
$dayf=date('j',$filet);


// define actualtime
$yeara=date('Y',$actualt);
$montha=date('n',$actualt);
$daya=date('j',$actualt);

$t=(strtotime("$montha/$daya/$yeara")-strtotime("$monthf/$dayf/$yearf"))/60/60/24;
$final=floor($t);

return 
$final;
}


function 
delete_old_folders($dir){
    if (
is_dir($dir)){
        
$objects=scandir($dir);
            foreach (
$objects as $object){
                if(
$object !="." && $object !=".." && (filetype($dir."/".$object)=="dir") && (vartime("$dir."/".$object")>1)){
                    
rrmdir($dir."/".$object);
                }
            }
    }
}
 function 
rrmdir($dir) {
   if (
is_dir($dir)) {
     
$objects scandir($dir);
     foreach (
$objects as $object) {
       if (
$object != "." && $object != ".." && (vartime("$dir/$object")>1)) {
                if (
filetype($dir."/".$object) == "dir"rrmdir($dir."/".$object); else unlink($dir."/".$object);
        }
     }
     
reset($objects);
     
rmdir($dir);
   }
 }

?>

Y llamarlo con:

Código PHP:
delete_old_folders('uploads'

Pero me sigue sin funcionar.


Es posibe que el comando filemtime no funcione para sacar los datos del tiempo de carpetas? Quizas solo pueda con archivos...

Me da este error:
Código:
Warning: filemtime() [function.filemtime]: stat failed for 0
  #6 (permalink)  
Antiguo 16/11/2010, 07:34
 
Fecha de Ingreso: noviembre-2010
Mensajes: 13
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Borrar carpetas que no se hayan sido creadas anteriormente a un cierto tie

¿no tienes comillas de más en vartime("$dir."/".$object")?
  #7 (permalink)  
Antiguo 16/11/2010, 07:45
 
Fecha de Ingreso: enero-2009
Mensajes: 45
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: Borrar carpetas que no se hayan sido creadas anteriormente a un cierto tie

Cita:
Iniciado por gandres Ver Mensaje
¿no tienes comillas de más en vartime("$dir."/".$object")?
Si, ya está cambiado, pero sigo teniendo problemas con el filemtime() cuando comprueba el tiempo en las carpetas.

Por ejemplo, para ver el tiempo de la carpeta "updates", uso:

Código PHP:
<?php
function vartime($filepath){
$filet=filemtime($filepath);
$actualt=time();

// define filetime
$yearf=date('Y',$filet);
$monthf=date('n',$filet);
$dayf=date('j',$filet);


// define actualtime
$yeara=date('Y',$actualt);
$montha=date('n',$actualt);
$daya=date('j',$actualt);


$t=(strtotime("$montha/$daya/$yeara")-strtotime("$monthf/$dayf/$yearf"))/60/60/24;
$final=floor($t);
echo 
$final;
}

vartime('updates');


?>
Y obtengo el siguiente error:

Código:
Warning: filemtime() [function.filemtime]: stat failed for updates in C:\xampp\htdocs\prueba\time.php on line 3
14929
  #8 (permalink)  
Antiguo 17/11/2010, 09:13
 
Fecha de Ingreso: noviembre-2010
Mensajes: 13
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Borrar carpetas que no se hayan sido creadas anteriormente a un cierto tie

Leí por ahi que ese error te puede aparecer en archivos de más de 2Gb, ¿puede ser ese el caso?
  #9 (permalink)  
Antiguo 17/11/2010, 09:47
 
Fecha de Ingreso: enero-2009
Mensajes: 45
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: Borrar carpetas que no se hayan sido creadas anteriormente a un cierto tie

Cita:
Iniciado por gandres Ver Mensaje
Leí por ahi que ese error te puede aparecer en archivos de más de 2Gb, ¿puede ser ese el caso?

No, no es el caso.

Ya lo consegui arreglar. Al final use la funcion filectime()

Un saludo!

Etiquetas: borrar, carpetas
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 00:01.