Eerste 3 bestanden verwijderen

Status
Niet open voor verdere reacties.

guido10a

Gebruiker
Lid geworden
5 aug 2007
Berichten
13
Ik ben opzoek naar een PHP-scriptje voor het volgende:

In een map worden automatisch (met cronjobs) backups geplaatst. Dat heb ik al. Het volgende nog niet: hij kijkt of er 4 of meer bestanden in de map aanwezig zijn. Zo ja: delete de eerste 3 bestanden. Zo nee: doe niets.

Het gaat dus om:
- Kijken hoeveel bestanden in één map
- Bij 4 of meer: delete eerste 3 bestanden
 
Het kijken in een directory zou je zo kunnen doen:
PHP:
//PHP5 versie
function num_files_php5($directory) {
  //Number Of Files op 0 zetten
  $nof = 0;
  //Directory scannen
  $directory_list = scandir($directory);
  foreach($directory_list AS $file){
    if(!is_dir($file)){
      $nof++;
    }
  }
  return $nof;
}
//PHP4 versie
function num_files_php4($directory) {
  //Directory openen
  $dir  = opendir($directory);
  //Doorlopen van inhoud
  while (false !== ($filename = readdir($dir))) {
    if(!is_dir($filename)) {
      $files[] = $filename;
    }
  }
  if(isset($files)) {
    $nof = count($files);
  }
  else {
    $nof = 0;
  }
  return $nof; 
}
Ik denk dat het zo moet werken, het PHP4 gedeelte heb ik nagenoeg overgenomen van de PHP.net site bij de functie scandir();
 
Dus ze werken? Ik heb het namelijk zelf nog nooit toegepast...
 
Met wat aanpassingen wel. Want ik heb meer gegevens nodig, maar dat kan ook vanuit de function die jij hebt gemaakt.
 
Nou ja, volgens mij lossen de functies je eerste vraag op.

Het simpelste lijkt mij door de files te sorteren op naam maar dan moet je er voor zorgen dat er een op-/aflopende volgorde in zit. (Bijvoorbeeld backup20070810.txt)

Ik heb wat bedacht dat wellicht de hele handel doet...
PHP:
//PHP5 versie 
function files_php5($directory) { 
  //$files defineren als array 
  $files = array(); 
  //Directory scannen 
  $directory_list = scandir($directory); 
  foreach($directory_list AS $file){ 
    if(!is_dir($file)){ 
      $files[] = $file; 
    } 
  }
  sort($files);
  return $files; 
} 
//PHP4 versie 
function files_php4($directory) {
  //$files defineren als array
  $files = array();
  //Directory openen 
  $dir  = opendir($directory); 
  //Doorlopen van inhoud 
  while (false !== ($filename = readdir($dir))) { 
    if(!is_dir($filename)) { 
      $files[] = $filename; 
    } 
  }
  sort($files); 
  return $files; 
} 


function delete_files($directory, $file_array) {
  //Zolang er meer dan 1 bestand in de betreffende directory staat wordt het bovenste
    dus oudste bestand verwijderd is de bedoeling
  while(count(files_php4($directory)) > 1) {
    delete($file_array[0]);
    echo 'Bestand '. $file_array[0] .' verwijderd!<br />';
  }
}
Ik stel voor dat je het eerst op een test-map uitprobeerd, ik wil namelijk niet op mijn geweten hebben dat er ineens iets heel anders met je backups gebeurd.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan