删除目录和文件时出现问题


Issue with deleting directory and files

我试图在单击按钮后删除一个目录,其中包含任何文件和其他目录,但我遇到了问题。

我收到的错误是-

PHP致命错误:未捕获异常"UnexpectedValueException",带有消息'递归目录描述符::__construct(http://...@alink.co.uk/):无法打开中的目录:未实现

这是与相关的代码部分

$dir = 'http://www.thisismylink.co.uk/userfolder/' . $row['email'] . "/";
    $it = new RecursiveDirectoryIterator($dir, RecursiveDirectoryIterator::SKIP_DOTS);
    $files = new RecursiveIteratorIterator($it,
                RecursiveIteratorIterator::CHILD_FIRST);
    foreach($files as $file) {
        if ($file->isDir()){
            rmdir($file->getRealPath());
        } else {
            unlink($file->getRealPath());
        }
    }
    rmdir($dir);

现在的结构是-

用户电子邮件($dir)

  • 图片
    • 图片.png
  • 视频
    • 视频.mp4

我想做的是删除"用户电子邮件"目录中的所有内容,以及"用户目录"本身以及

似乎在使用完整的URL作为顶部目录。不是吗:

$dir = 'userfolder/' . $row['email'] . "/"; //Relative to your script
$it = new RecursiveDirectoryIterator($dir, RecursiveDirectoryIterator::SKIP_DOTS);
$files = new RecursiveIteratorIterator($it,
            RecursiveIteratorIterator::CHILD_FIRST);
foreach($files as $file) {
    if ($file->isDir()){
        rmdir($file->getRealPath());
    } else {
        unlink($file->getRealPath());
    }
}
rmdir($dir);

这是一种非常危险的处理问题的方式;我并不是想回避你的实际问题,但请考虑让数据库中充满"目录"及其关联对象。当你删除用户时,请在数据库中设置一个标志为"toBeRemoved"或类似的东西。

然后,每隔一段时间,让一个cron/scheduled任务通过并查询要删除的目录列表,然后删除数据库条目/将其标记为已更新。

问题是,无论你认为脚本有多安全,它都可能被利用,或者从基于web/用户的输入中产生不可预测的结果。

如果这些错误是基于权限的,那么使用上述心态可以在"根"用户级别上完成这项工作,而不用担心系统文件会在代码被坏用户(或善意用户遇到错误的事件组合)破坏时被删除。