Rekurzív php script könyvtár törléséhez

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

Hugyecz Görgy (Harder)
20+ éve munkám és hobbim is az online világhoz köt. Az utóbbi 10+ évben leginkább keresőopimalizálás (SEO) témában tevékenykedem, mellette pedig Google Ads és Facebook PPC fronton is segítem ügyfeleimet. Korábban 10+ évig webgrafika, sitebuild, weboldal készítés témakörben mozogtam.

3 HOZZÁSZÓLÁS

  1. 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……..

  2. 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

  3. 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);
    *************************************

HOZZÁSZÓLOK A CIKKHEZ

Kérjük, írja be véleményét!
írja be ide nevét