Autor Zpráva
gdx
Profil *
Ahoj, potreboval bych napsat v PHP skript, ktery po spusteni vymaze z daneho adresare vse krome poslednich xx vytvorenych souboru. Jde mi tedy o to, aby v danem adresari permanentne zustavalo jen xx poslednich souboru. Samozrejme to nechci zadarmo. Kontakt: dan.bart@email.cz, nebo ICQ: 11625064
armin
Profil
Nezkoušel jsem, možná je i někde překlep. Funguje to tak, že se projede zadaný adresář (první parametr dané fce), vytvoří se pole s klíči unixovského času změny souborů v tomto adresáři + pětimístné pořadové číslo (kdyby nastala situace že jsou 2 soubory stejného času, tak ať nedojde k přepsání klíče), předpokladám že se přes úroveň 99999 souborů nedostanete. Dále se toto vytvořené pole seřadí dle klíčů, ověří se, zda počet ponechávaných souborů není vyšší než počet naleznutých souborů, pokud je, tak se změní toto číslo na počet naleznutých souborů (jen kvůli smyčce for) a provede se odstranění těchto x souborů z konce pole (teda těch nejnovějších). Pak co mi zbyde v poli, tak projedu a vymažu.

<?php
  /* $dir => directory to browse */
  /* $keep => keeps last x files */
  function DeleteFromDirectory ($dir,$keep) {
    if ($handle = opendir($dir)) {
      $x=0;
      $out=array();
      while (false !== ($file = readdir($handle))) {
        if ($file != "." && $file != ".." && is_file($dir.'/'.$file)) {
          $x++;
          $out[filectime($dir.'/'.$file).str_pad($x,5,'0',STR_PAD_LEFT)]=$dir.'/'.$file;
        }
      }
      closedir($handle);

      ksort($out);

      $keep=($keep>$x) ? $x : $keep;

      for ($i=0;$i<=$keep;$i++) {
        array_pop($out);
      }

      foreach ($out as $val) {
        @unlink($val);
      }
    }
  }

  DeleteFromDirectory('/home/httpd/domena.tld/www/cache/',20);
?>

Vaše odpověď

Mohlo by se hodit

Podělte se prosím o své zkušenosti s touto kategorií Věnujte pozornost pravidlům. Zejména:
• Máte-li zájem o tuto nabídku/poptávku, využijte uvedený kontakt, nepište do diskuse.
• Držte se tématu.
  • Nepoučujte.

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0