Avatar billede michaeltryl Seniormester
28. april 2017 - 08:50 Der er 6 kommentarer og
1 løsning

slet filer ældre end X dage

Hej
Jeg har fundet dette script, som jeg lige nu har sat til at slette filer ældre end 6o sekunder - indtil jeg ved det virker.
Jeg har dog et problem med $path
mappen jeg vil slette fra ligger i cron/backup.
og filen jeg køre scriptet fra ligger i cron mappen


    $path = '/backup/';
if ($handle = opendir($path)) {

    while (false !== ($file = readdir($handle))) {
        $filelastmodified = filemtime($path . $file);
        //24 hours in a day * 3600 seconds per hour
        if((time() - $filelastmodified) > 60)
        {
          unlink($path . $file);
        }

    }

    closedir($handle);
}
Avatar billede acore Ekspert
28. april 2017 - 08:54 #1
Tror du ikke det skal være

$path = './backup/';
Avatar billede michaeltryl Seniormester
28. april 2017 - 09:45 #2
Så får jeg fejlen
Warning: unlink(./backup/..): Is a directory in ......

men filerne bliver fint slettet?
Avatar billede acore Ekspert
28. april 2017 - 09:48 #3
Det er fordi readdir(..) giver en fil, der hedder ".." (og muligvis også en, der hedder "."). Dem kan/skal du ikke slette.

Så brug

if($file != ".." && $file != "." && (time() - $filelastmodified) > 60)
Avatar billede michaeltryl Seniormester
28. april 2017 - 10:00 #4
mange tak for hjælpen - det virkede :-)
Avatar billede acore Ekspert
28. april 2017 - 10:03 #5
Super.

I et path, så er "/xxx" absolut, "./xxx" er relativt og "./../xxx" er relativt og et directory op. Når først man ved det, er det let nok.
Avatar billede acore Ekspert
28. april 2017 - 10:27 #6
Kom til at tænke på, at din kode ikke virker, hvis der ligger et eller flere directories under cron/backup.

Hvis der ikke kan ligge directories der, så behøver du strengt taget ikke at gøre noget.

Hvis der er directories, men ikke skal søges i dem, så

if(is_file($path.$file) && $file != ".." && $file != "." && (time() - $filelastmodified) > 60)

Hvis der skal søges og slettes i directories, er det letteste at lave din kode til en funktion, så du kan kalde rekursivt. Sig til, hvis relevant.
Avatar billede arne_v Ekspert
28. april 2017 - 15:46 #7
Hvorfor opendir/readdir/closedir fremfor glob?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester