【问题标题】:Issue with deleting directory and files删除目录和文件的问题
【发布时间】:2015-03-01 13:39:47
【问题描述】:

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

我收到的错误是 -

PHP 致命错误:未捕获的异常“UnexpectedValueException”与 信息 'RecursiveDirectoryIterator::__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

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

【问题讨论】:

    标签: php delete-file rmdir delete-directory


    【解决方案1】:

    似乎您正在使用完整的 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);
    

    【讨论】:

      【解决方案2】:

      这是真的处理问题的一种相当危险的方式;我并不是要回避您的实际问题,但是请考虑保留一个充满“目录”的数据库以及它们与谁相关联。当您删除用户时,将数据库中的标志设置为“toBeRemoved”或类似的东西。

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

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

      如果这些错误是基于权限的,使用上述思路将允许在“root”用户级别完成此操作,而不必担心系统文件在您的代码被坏用户(或善意的用户点击了错误的事件组合)。

      【讨论】:

        猜你喜欢
        • 2013-06-07
        • 1970-01-01
        • 1970-01-01
        • 2013-07-31
        • 2017-10-08
        • 1970-01-01
        • 2012-04-02
        • 2014-02-14
        • 2023-03-11
        相关资源
        最近更新 更多