【问题标题】:I'm getting "is a directory" error when trying unlink directory尝试取消链接目录时出现“是目录”错误
【发布时间】:2015-10-27 01:10:14
【问题描述】:

我正在尝试创建一个函数,该函数将定期运行以删除任何没有活动用户的旧“用户”文件夹。这是我拥有的功能:

function delete_temp_user_files() {
    $dir = $_SERVER['DOCUMENT_ROOT'] . "/users/";
    $dir_files = array();
    $dir_files = scandir($dir);
    foreach ($dir_files as $username) {
        if ($username == "." || $username == "..") continue;
        if (!user_exist($username)) {
            $dir1 = $_SERVER['DOCUMENT_ROOT'] . "/users/" . $username;
            if (!is_dir($dir1)) continue;
            if (file_exists($dir1)) unlink($dir1);
        }
    }
}

但是当它尝试删除目录时,我收到错误“警告:取消链接(/path/to/users/delete1/):是 /page.php 中的目录在线...”我知道该目录存在因为我可以在目录中看到它,并且无论如何它都使用 scandir() 找到了它。

我使用 unlink 在其他脚本中删除这些相同的文件夹,它工作正常。目录不是空的,所以我不能使用 rmdir()。

我不熟悉权限或类似的东西,这是某种问题吗?如果我只使用 PHP 脚本来删除文件和文件夹(比如当用户单击运行我编写的脚本的删除按钮时),我是否需要担心权限?

更新:

在网上搜了一圈,终于找到删除目录的方法了,好不容易lol 把这个函数加到之前的函数里面就可以了!

function delete_dir($directory) {
    foreach(glob("{$directory}/*") as $file)
    {
        if(is_dir($file)) { 
            delete_dir($file);
        } else {
            unlink($file);
        }
    }
    rmdir($directory);
}

【问题讨论】:

标签: php


【解决方案1】:

unlink用于删除文件,使用rmdir

请注意,您必须先删除目录中的所有文件。

另外,您的代码非常危险。假设随着时间的推移,您有 100,000 个用户,因此将有 100,000 个文件夹。你能想象这条线需要多少时间吗?

foreach ($dir_files as $username) {

请换个思路。

好方法,不要从数据库中删除用户。查找自 6 个月(例如)以来未登录的用户并禁用它们。这样,你的循环就更小了。

【讨论】:

  • @Fred-ii- 是的,它是一样的。当我开始写答案时,您的评论不存在。唯一不同的是,我给出了答案(因为它是直截了当的)并且你发表了评论。
【解决方案2】:

rmdir 文档页面上有一个函数:

 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); 
   } 
 }

肯定会让你的生活更轻松。

【讨论】:

    【解决方案3】:

    我知道这是一个迟到的答案,但我通过检查文件是否存在来解决它。

    我正在使用数据库作为文件的路径。所以你可以试试下面的示例代码。

    if(!empty($course->picture)){
      // unlink here
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-25
      • 2015-01-27
      • 1970-01-01
      相关资源
      最近更新 更多