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

Kapcsolódó bejegyzések:
  • A lentebbi kód egy célt szolgál: wordpress honlap tartalmát tudod törölni úgy, hogy megnyitsz egy bizonyos URL-t. Akkor is, ha a WordPress honaphoz egyébként nin …

  • Gyakorta kell egy-egy szkriptnek base path-et, base dir-t satöbbit megadni abszolút elérési úttal. Egy egyszerű kis scripttel ezt pillanatok alatt meghatározhatj …

  • Az előbb szívtam azzal, hogy egy fájlt – illetve azokat a könyvtárakat amikben ez a fájl volt – nem tudtam törölni, mert a windows arra hivatkozott hogy túl hoss …

  • Gyakran látni a weboldalakon “vissza” linkeket. Általában ezek arra a helyre mutatnak, ahonnan valószínűleg jöhetett a felhasználó, rosszabb esetben JavaScript-e …

  • Kijött a legfrissebb WordPress, érdemes minél gyorsabban megejteni a frissítést. Az alábbi fájlok változtak a 2.3.2-es verzióhoz képest.xmlrpc.php …

A cikket beküldte: Harder (http://blog.harder.hu)

3 hozzászólás

  1. animal says:

    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. Timi says:

    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. szabofe says:

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

Szólj hozzá
a Rekurzív php script könyvtár törléséhez c. bejegyzéshez

- Engedélyezett HTML elemek: <a> <em> <strong> <ul> <ol> <li>
- Forráskód beküldéséhez tedd a kódot ezek közé: <pre lang="php" line="1">Kódrészlet helye itt</pre>