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