Heren, en Dames uiteraard.

Als volledig newbie ben ik uiteindelijk hier beland omdat ik nergens op internet een kant en klaar script kan vinden die aan mijn behoefte voldoet. Ik hoop dat jullie mij kunnen helpen.

Ik wil een php script die in een directory mappen en bestanden zoek die ouder zijn dan x dagen en deze verwijderd.

waarom?
Ik maak vanaf sit A een backup (directadmin) en ftp deze backup naar serverB. Omdat ik niet tot in de eeuwigheid backups wil bewaren mogen ze van mij na 5 dagen verwijderd worden.

Nu heb ik dit gevonden maar het werkt niet:

<?php

$dir = '/home/backup';
if ($handle = opendir($dir)) {
/* This is the correct way to loop over the directory. */
while (false !== ($file = readdir($handle))) {
if ($file[0] == '.' || is_dir("$dir/$file")) {
// ignore hidden files and directories
continue;
}
if ((time() - filemtime($file)) > ($days *86400)) { //5 days
unlink("$dir/$file");
}
}
closedir($handle);
}
?>


Excuus op een of andere manier eindgt de quote niet :(

deze foutmelding krijg ik:

Warning: filemtime() [function.filemtime]: stat failed for 9.rss in /home/sieliaku/public_html/delete.php on line 11

Warning: unlink(/home/sieliaku/public_html/images/phocagallery//9.rss) [function.unlink]: Permission denied in /home/sieliaku/public_html/delete.php on line 12


dit bestand heb ik zelfs al 777 gechmod.
De foutmelding krijg ik alleen voor de bestanden, met de directory's wordt helemaal niets gedaan :(

helaas kan ik geen ssh toegang, maar dit script wil ik draaien
find /home/backup -type f -mtime +5 -exec rm {} \;
vervolgens dit
find /home/backup -type d -mtime +5 -exec rm {} \;

Ik hoop dat jullie mij verder kunnen helpen.

groet
Roy

Ik vermoed dat de paden die je gebruikt niet helemaal kloppen. Sowieso zul je in filemtime() ook de $dir moeten opgeven aangezien het relatieve pad anders niet klopt. Zie ook het pad in de tweede foutmelding, dat kan niet juist zijn.

Verder kun je wellicht beter [php]glob[/php]() gebruiken, dan krijg je direct de relatieve paden terug en hoef je die zelf niet meer te construeren...
Ik gebruik dit om te tellen of te verwijderen, misschien kan je hier wat syntax uithalen. glob lijkt me ook wel een efficiente oplossing, kende ik nog niet.

<?php
$jouw_pad= "tmp";
if ( $directory_handle = opendir( $jouwpad ) )
{
  $count = 0;
  while ( false !== ( $file = readdir( $directory_handle ) ) )
  {
    if($file != "." && $file != "..")
    {
      if(time()- fileatime($jouwpad . "/" . $file) < MAX_IDLE_TIME * 60)
      {
        $count++;
      }
      else //remove files with PHP - Unlink()
      {
        unlink($jouwpad . "/" . $file);
      }
    }
  }
  closedir($directory_handle);
}
?>

Dag John D,
Helaas kan ik niet zoveel met je code :( Want de selectie moet echt op ouderdom plaatsvinden. En code combineren??

Nadat ik de paden heb aangepast krijg ik 1 foutmelding minder :D
Helaas worden de bestanden nog niet verwijderd, de twee foutmelding blijft.

Glob gebruiken?
Zover ik begrijp laat je dan zoeken naar een pattern. Maar er is geen er is geen 'pattern' alleen maar een tijdsindicatie. pattern zou * zijn.

Ik heb momenteel een foto map genomen, omdat ik weet dat daar veel mappen en bestanden in staan die voldoen aan de voorwaarden.
Momenteel is de code:
<?php

$dir = '/home/sieliaku/public_html/images/phocagallery';
if ($handle = opendir($dir)) {
/* This is the correct way to loop over the directory. */
while (false !== ($file = readdir($handle))) {
if ($file[0] == '.' || is_dir("$dir/$file")) {
// ignore hidden files and directories
continue;
}
if ((time() - filemtime("$dir/$file")) > ($days *86400)) { //7 days
unlink("$dir/$file");
}
}
closedir($handle);
}
?>


en de foutmelding

Warning: unlink(/home/sieliaku/public_html/images/phocagallery/9.rss) [function.unlink]: Permission denied in /home/sieliaku/public_html/delete.php on line 12


Dit is een rechten probleem, de code klopt wel, maar PHP heeft simpelweg geen toestemming om de bestanden te verwijderen.

Ga naar de map in questie en verander de rechten naar 777, (vergeet niet aan te geven dat de verandering doorgevoerd moet worden op alle sub-mappen en bestanden)
Super, Dat deed het hem.
Ik had de bestanden wel 777 gegeven, maar niet de dir.
Volgende issue.
De bestanden in de root van de map worden netjes verwijderd. Maar wel allemaal? Niet alleen die ouder zijn dan 5 dagen.
Vervolgens worden alle subdirectory's overgeslagen :(

Reageren