Kasowanie pełnego katalogu
Funkcja rmdir() języka PHP, umożliwia kasowanie tylko i wyłącznie katalogów, które nie zawierają żadnej zawartości. Co więc zrobić kiedy musimy skasować folder, który zawiera inne pliki lub katalogi?
Poniższa funkcja PHP, kasuje cały katalog wraz z jego zawartością:
$directory = "../folder";
function deleteDir($directory, $empty = false) {
if(substr($directory,-1) == "/") {
$directory = substr($directory,0,-1);
}
if(!file_exists($directory) || !is_dir($directory)) {
return false;
} elseif(!is_readable($directory)) {
return false;
} else {
$directoryHandle = opendir($directory);
while ($contents = readdir($directoryHandle)) {
if($contents != '.' && $contents != '..') {
$path = $directory . "/" . $contents;
if(is_dir($path)) {
deleteAll($path);
} else {
unlink($path);
}
}
}
closedir($directoryHandle);
if($empty == false) {
if(!rmdir($directory)) {
return false;
}
}
return true;
}
}Do funkcji w zmiennej $directory przekazujemy ścieżkę do folderu, który chcemy skasować (UWAGA: funkcja kasuje tylko foldery, nie możemy podawać ścieżki do pliku). Funkcja zwraca true jeżeli katalog został skasowany, a jeżeli wystąpiły jakieś komplikacje to false.
Funkcję możemy wykorzystać w ten sposób:
$directory = "../folder"; //ścieżka do katalogu, względem pliku, w którym znajduje się funkcja kasująca folder deleteDir($directory, $empty = false); //kasujemy katalog
Przy używaniu kodu, należy zachować szczególną uwagę, gdyż skasowanych plików i katalogów praktycznie nie da się odzyskać.