Autor | Zpráva | ||
---|---|---|---|
gdx Profil * |
#1 · Zasláno: 24. 7. 2009, 21:58:48
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 |
#2 · Zasláno: 24. 7. 2009, 22:44:35
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); ?> |
||
Časová prodleva: 15 let
|
0