Ez a kis kód törli a megadott könyvtárat és annak tartalmát, ha egy könyvtár nem üres, meghívja saját magát míg végül törli az összes könyvtárat.
Jól jön olyan esetekben, ha egy script létrehoz könyvtárakat amiket nincs jogunk törölni ftp-n keresztül, vagy túl sok fájl van, aminek nincs kedvünk végigvárni a törlését.
A kód:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | <?php function deldir($dirname) { if (is_dir($dirname)) // a megadott elérési út könyvtár-e $dir_handle = opendir($dirname); if (!$dir_handle) return false; while($file = readdir($dir_handle)) { if ($file != "." && $file != "..") { if (!is_dir($dirname."/".$file)) // ha nem könyvtár akkor törli unlink($dirname."/".$file); else deldir($dirname.'/'.$file); // ha könyvtár, meghívja saját magát és így tovább... } } closedir($dir_handle); rmdir($dirname); return true; } // a törlendő könyvtár neve/elérési útja deldir('eztTorold'); ?> |
Forrás: http://www.ozzu.com/programming-forum/php-delete-directory-folder-t47492.html
Szerző: crash
Nagyon okos dolog…. én is hasonló képen védem le az oldalaimat…. el van rejtve a forráskódba egy hasonló „script” amit kintről meg lehet hívni és törli a mappa tartalmát…. minden egyes php-t és mappát ami a scriptet tartalmazó file-al azonos mappában van……..
Ha jól látom, az else ág a belső if-hez tartozik, ezért szebb és egyértelműbb lenne a kód, ha a belső if alatt helyezkedne el.
Kezdő programozóként, lenne egy kérdésem még.
Hogy tér vissza a vezérlés egy alkönyvtár törlése után újra, hogy a könyvtár tartalmát tovább vizsgálja további file/ könyvtár törlések miatt?
Köszönöm szépen! Timi
Egy másik megoldás(dir-engedély, file-time figyelés)
*********************************************
//könyvtár tartalom törlése: ha $ido-nél(3600=1óra) van régebbi fájl / ha $oc=1 a könyvtárat is!!
function rmdirr($dirname, $oc=0, $ido)
{ // Ha nem létezik -> false
if (!file_exists($dirname))
{ return false; }
// Ha fájl és időn túli -> törlés
if ( (is_file($dirname)) && ((time()-filemtime($dirname)) > $ido) )
{ return unlink($dirname); }
// Ha könyvtár
if(is_dir($dirname))
{ $dir = dir($dirname);
while (false !== $entry = $dir->read())
{ // Ha a benne levő nem fájl -> rekurzív hívás kimarad és ciklus tovább
if ($entry == ‘.’ || $entry == ‘..’)
{ continue; }
// Rekurzív meghívás a talált fájlra
rmdirr(„$dirname/$entry”,$oc,$ido);
}
$dir->close();
}
// Könyvtárt is töröl
if ($oc === 1)
{ return rmdir($dirname); }
}
//Az 5 percnél régebbi fájlok törlése
rmdirr(‘photos/original’, 0, 300);
*************************************