Czyszczenie/usuwanie katalogu w PHP
październik 9th, 2008. 1 komentarz.
Kategorie: PHP, Zabawy z kodem.
Dzisiaj stanąłem przed koniecznością skasowania kilku katalogów i usunięcia zawartości kilku innych. Ponieważ uprawnienia do nich posiadał tylko serwer (użytkownik www, czy jakoś tak), musiałem to zrobić oczywiście z poziomu skryptu.
Doszedłszy do wniosku (po wielu bojach z Google), iż aby usunąć katalog, należy go najpierw opróżnić, w oparciu o kod znaleziony gdzieś w szuwarach Internetu, skonstruowałem własną funkcję, która może komuś się przyda
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | /* EmptyDir, v0.1 uzycie: EmptyDir("nazwakatalogu"); EmptyDir("nazwakatalogu", false); // (lub 0) - skasowanie zawartosci katalogu EmptyDir("nazwakatalogu", true); // (lub 1) - usuniecie katalogu razem z zawartoscia, niekoniecznie w tej kolejnosci wartosci zwracane: true - powodzenie false - niepowodzenie */ function EmptyDir($dirName, $rmDir = false) { if($dirHandle = opendir($dirName)) { while(false !== ($dirFile = readdir($dirHandle))) if ($dirFile != "." && $dirFile != "..") if(!unlink($dirName . "/" . $dirFile)) return false; closedir($dirHandle); if($rmDir) if(!rmdir($dirName)) return false; return true; } else return false; } |
Jak widać, całość opiera się na unlink() (usuwanie pliku) oraz rmdir() (usuwanie pustego katalogu). Podobny przykład można zobaczyć w manualu funkcji rmdir().
marek dnia wrzesień 23rd, 2009
Problem w tym, że nie wywala podkatalogów. Trzeba zapętlić funkcję w funkcji. To podobno obciąża serwer, ale jest do zrobienia. czyli:
edit (WRonX): oczywiście nie ponoszę odpowiedzialności za ten kod, bo nie chciało mi się go przetestować :)