我得到"是一个目录"尝试取消链接目录时出错

时间:2015-08-04 14:48:45

标签: php

我试图创建一个定期运行的功能,以删除任何旧用户"没有活跃用户的文件夹。这是我的功能:

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中的目录是否在线...&#34 ;我知道该目录存在,因为我可以在目录中看到它,并且无论如何它发现它使用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);
}

3 个答案:

答案 0 :(得分:2)

unlink用于删除文件,请使用rmdir

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

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

foreach ($dir_files as $username) {

请以另类方式思考。

好的方法是,不要从数据库中删除用户。找到自6个月以来没有登录的用户(比如说)并禁用它们。这样,你的循环就会变小。

答案 1 :(得分: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); 
   } 
 }

确保它会让你的生活更轻松。

答案 2 :(得分:0)

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

我正在使用数据库作为文件的路径。因此,您可以在下面尝试示例代码。

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