Question

I am trying to remove a directory and all of its contents with this script...

<?php
$app = $_POST['app'];

if (isset($_POST['app'])) {
    $dir = "../apps/" . $app . "/";

function rrmdir($dir) {
    if (is_dir($dir)) {
        $objects = scandir($dir);
        foreach ($objects as $object) {
            if ($object != "." && $object != "..") {
                if (filetype($dir."/".$object) == "dir") rrmdir($dir."/".$object); else unlink($dir."/".$object);
            }
        }
        reset($objects);
        rmdir($dir);
    }
}
}
?>

The $post is working fine and the script is not returning any errors but its just not deleting the directory. Could it have something to do with folder permissions? Do I need to activate any PHP extensions?

--EDIT-- The linked duplicate does not do what I want and I don't know how to change the code for it. I am deleting a directory on the client side so I can't use __DIR__ as that keeps the path like this /test/app and I need them to be like this \test\app also the code does not remove the folder but it does remove all of the contents. I believe that is to do with the FilesystemIterator::SKIP_DOTS line. I need the code to remove the folder as well because when or if the user installs the app again it wont work due to the duplicate folder.

Working code:

<?php
$app = $_POST['app'];

if (isset($_POST['app'])) {
$dir ="../apps/" . $app;

$di = new RecursiveDirectoryIterator($dir, FilesystemIterator::SKIP_DOTS);
$ri = new RecursiveIteratorIterator($di, RecursiveIteratorIterator::CHILD_FIRST);
foreach ( $ri as $file ) {
    $file->isDir() ?  rmdir($file) : unlink($file);
}
rmdir($dir);
}
?>
Was it helpful?

Solution

The link @Gordon sent me to, helped get me the answer.

This is my new working code.

<?php
$app = $_POST['app'];

if (isset($_POST['app'])) {
$dir ="../apps/" . $app;

$di = new RecursiveDirectoryIterator($dir, FilesystemIterator::SKIP_DOTS);
$ri = new RecursiveIteratorIterator($di, RecursiveIteratorIterator::CHILD_FIRST);
foreach ( $ri as $file ) {
    $file->isDir() ?  rmdir($file) : unlink($file);
}
rmdir($dir);
}
?>
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top