src/Path.php
public static function rmtree(string $path)
    {
        $path = self::realpath($path);
        if (empty($path)) // File/dir does not exist
            return true;

        if (empty(self::$required_prefix))
            throw new \RuntimeException("Safety measure: required prefix needs to be set before running rmtree");

        if (strpos($path, self::$required_prefix) !== 0)
            throw new \RuntimeException("Refusing to remove directory outside " . self::$required_prefix);

        self::checkWrite($path);

        if (!is_dir($path))
            return unlink($path) ? 1 : 0;

        $cnt = 0;
        $d = \dir($path);
        while (($entry = $d->read()) !== false)
        {
            if ($entry === "." || $entry === "..")
                continue;

            $entry = $path . '/' . $entry;
            self::checkWrite($entry);

            if (is_dir($entry))
                $cnt += self::rmtree($entry);
            else
                $cnt += (unlink($entry) ? 1 : 0);
        }

        rmdir($path);
        return $cnt + 1;
    }
public static function rmtree(string $path)
    {
        $path = self::realpath($path);
        if (empty($path)) // File/dir does not exist
            return true;

        if (empty(self::$required_prefix))
            throw new \RuntimeException("Safety measure: required prefix needs to be set before running rmtree");

        if (strpos($path, self::$required_prefix) !== 0)
            throw new \RuntimeException("Refusing to remove directory outside " . self::$required_prefix);

        self::checkWrite($path);

        if (!is_dir($path))
            return unlink($path) ? 1 : 0;

        $cnt = 0;
        $d = \dir($path);
        while (($entry = $d->read()) !== false)
        {
            if ($entry === "." || $entry === "..")
                continue;

            $entry = $path . '/' . $entry;
            self::checkWrite($entry);

            if (is_dir($entry))
                $cnt += self::rmtree($entry);
            else
                $cnt += (unlink($entry) ? 1 : 0);
        }

        rmdir($path);
        return $cnt + 1;
    }
public static function rmtree ( string $ path ) { $ path = self :: realpath ( $ path ) ; if ( empty ( $ path ) ) // File/dir does not exist return true ; if ( empty ( self :: $ required_prefix ) ) throw new \ RuntimeException ( "Safety measure: required prefix needs to be set before running rmtree" ) ; if ( strpos ( $ path , self :: $ required_prefix ) !== 0 ) throw new \ RuntimeException ( "Refusing to remove directory outside " . self :: $ required_prefix ) ; self :: checkWrite ( $ path ) ; if ( ! is_dir ( $ path ) ) return unlink ( $ path ) ? 1 : 0 ; $ cnt = 0 ; $ d = \ dir ( $ path ) ; while ( ( $ entry = $ d -> read ( ) ) !== false ) { if ( $ entry === "." || $ entry === ".." ) continue ; $ entry = $ path . '/' . $ entry ; self :: checkWrite ( $ entry ) ; if ( is_dir ( $ entry ) ) $ cnt += self :: rmtree ( $ entry ) ; else $ cnt += ( unlink ( $ entry ) ? 1 : 0 ) ; } rmdir ( $ path ) ; return $ cnt + 1 ; }
Delete a directory and its contents. The provided path must be inside the configured prefix.
@param $path string The path to remove
@return int Amount of files and directories that have been deleted
Delete a directory and its contents . The provided path must be inside the configured prefix .