1

I created a button that links to finish.php. It is supposed to delete the installer directory. The problem is that it fails on the first try, but will work on subsequent reloads of the page:

function Delete($path){ 
    if (is_dir($path) === true){
        $files = array_diff(scandir($path), array('.', '..'));

        foreach ($files as $file){
            Delete(realpath($path) . '/' . $file);
        }
        return rmdir($path);
    }else if (is_file($path) === true){
        return unlink($path);
    }
    return false;
}
Delete('installer');

$filename = '../admin/installer/';
if (file_exists($filename)) { Delete('installer'); } else {header("Location: index.php");}
Nathan Rice
  • 3,091
  • 1
  • 20
  • 30
Grasper
  • 1,293
  • 12
  • 26

1 Answers1

1

I think your delete function is not stable.

You can use this function to delete folder, delete all it's files and folders :

public static function deleteDir($dirPath) {
    if (! is_dir($dirPath)) {
        throw new InvalidArgumentException("$dirPath must be a directory");
    }
    if (substr($dirPath, strlen($dirPath) - 1, 1) != '/') {
        $dirPath .= '/';
    }
    $files = glob($dirPath . '*', GLOB_MARK);
    foreach ($files as $file) {
        if (is_dir($file)) {
            self::deleteDir($file);
        } else {
            unlink($file);
        }
    }
    rmdir($dirPath);
}

Source : https://stackoverflow.com/a/3349792/3444315

Community
  • 1
  • 1
EngineerCoder
  • 1,445
  • 15
  • 30