从给定路径删除文件和文件夹

xxx 红色

我有一个名为图像的文件夹,在用户的文件夹中,例如:

图片

  • 用户 1
  • 用户 2
  • 等等..

当我从数据库中删除用户时,我还想删除该给定用户的所有文件和文件夹。所有这些都在一个带有函数的类中,但是当我执行该函数时,我的整个文件夹图像都被删除了...

我已经检查过是否选择了正确的用户,如果路径没问题。当我在 test.php 文件上测试它时,它运行良好,但在我的函数中它坏了。

如果单击 te 删除按钮,它会转到此功能:

$user = new user();

$id = $_db->mysqli->real_escape_string($_POST['id']);

$query = "SELECT * FROM users WHERE id = '" .$id."'";
$result = $_db->mysqli->query($query);

$userNumb = $result->num_rows;
$finalUserNumb = $userNumb;

if ($finalUserNumb > 0) {
  $user->deleteUser($id);
}

通过给定的id获取用户信息

public function userSelsectByID($selector, $id)
{
    $query = "SELECT " .$selector. " FROM users WHERE id ='" .$id."'";
    $result = $this->mysqli->query($query);
    $userInfo = $result->fetch_assoc();

    $itemResult = $userInfo[$selector];
    return $itemResult;
  }

删除文件功能

public function delete_files($target)
{
      if(is_dir($target)){
          $files = glob( $target . '*', GLOB_MARK ); //GLOB_MARK adds a slash to directories returned

          foreach( $files as $file ){
              $this->delete_files( $file );
              echo "Deleted ".$file." succesfull...</br>";
          }

          rmdir( $target );
      } elseif(is_file($target)) {
          unlink( $target );
      }
  }

删除用户函数

public function deleteUser($id)
{
    $user               = "DELETE FROM users WHERE id = '$id'";
    $userResult         = $this->mysqli->query($user);

    $uren               = "DELETE FROM uren WHERE user_id = '$id'";
    $urenResult         = $this->mysqli->query($uren);

    $cookieLogin        = "DELETE FROM cookieLogin WHERE user_id = '$id'";
    $cookieLoginResult  = $this->mysqli->query($cookieLogin);

    $gebruikersnaam = str_replace(' ', '_', $this->userSelsectByID('gebruikersnaam', $id));
    $this->delete_files('/sites/domain.nl/www/admin/images/'.$gebruikersnaam);
  }

我希望删除带有用户名的文件夹,但实际上整个图像文件夹都被删除了......我尝试了很多但没有任何效果:(

有人可以帮助我吗?

威尔 B。

在您的deleteUser函数中,您在从数据库中选择用户名之前删除用户。

我怀疑这会导致this->userSelsectByID()return null,导致传递'/sites/domain.nl/www/admin/images/'$this->delete_files()相反。

您需要调整操作顺序,以确保在从数据库中删除用户名之前检索到用户名,并确保在将用户名和用户目录传递给$this->delete_files().

public function deleteUser($id)
{
    $gebruikersnaam = str_replace(' ', '_', $this->userSelsectByID('gebruikersnaam', $id));
    $userImagesPath = '/sites/domain.nl/www/admin/images/'.$gebruikersnaam;

    $user               = "DELETE FROM users WHERE id = '$id'";
    $userResult         = $this->mysqli->query($user);

    $uren               = "DELETE FROM uren WHERE user_id = '$id'";
    $urenResult         = $this->mysqli->query($uren);

    $cookieLogin        = "DELETE FROM cookieLogin WHERE user_id = '$id'";
    $cookieLoginResult  = $this->mysqli->query($cookieLogin);

    if (!empty($gebruikersnaam) && is_dir($userImagesPath)) {
        $this->delete_files($userImagesPath);
    }
  }

作为glob在函数内递归使用的替代方法。我建议使用RecursiveDirectoryIterator代替。

这将允许您按照应删除的顺序检索所有文件和目录的列表:

给定目录结构

/home/fyrye/test/images
   - user1
       - 2018-12
           - image1.jpg
           - image2.jpg
       - 2019-01
           - image1.jpg
           - image2.jpg
   - user2
       - 2019-01
           - image1.jpg
           - image2.jpg
       - 2018-12
           - image1.jpg
           - image2.jpg

然后删除user1目录及其中的所有内容。

$directory = '/home/fyrye/test/images/user1';

$ri = new RecursiveIteratorIterator(
    new RecursiveDirectoryIterator($directory, FilesystemIterator::SKIP_DOTS | FilesystemIterator::KEY_AS_PATHNAME | FilesystemIterator::CURRENT_AS_FILEINFO),
    RecursiveIteratorIterator::CHILD_FIRST
);
/**
 * @var string $path
 * @var \SplFileInfo $splFileInfo
 */
foreach ($ri as $path => $splFileInfo) {
    if ($splFileInfo->isDir()) {
        rmdir($path);
        echo 'deleted directory: ' . $path;
    } elseif ($splFileInfo->isFile()) {
        unlink($path);
        echo 'deleted file: ' . $path;
    }
}
rmdir($directory);
echo 'deleted directory: ' $directory;

结果:

deleted file: /home/fyrye/test/images/user1/2018-12/image1.jpg
deleted file: /home/fyrye/test/images/user1/2018-12/image2.jpg
deleted directory: /home/fyrye/test/images/user1/2018-12
deleted file: /home/fyrye/test/images/user1/2019-01/image1.jpg
deleted file: /home/fyrye/test/images/user1/2019-01/image2.jpg
deleted directory: /home/fyrye/test/images/user1/2019-01
deleted directory: /home/fyrye/test/images/user1

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

列出C中给定路径中的文件夹,子文件夹和文件(Windows)

如何从文本文件中给定的路径创建文件夹和文件

删除文件和文件夹(例外)

帮助删除文件和文件夹

如何为给定路径创建文件夹结构和文件

Java-递归删除父路径的文件和文件夹

循环遍历给定的文件夹路径

移动文件和文件夹而不删除源文件夹的文件夹结构

删除文件夹中的所有文件和文件夹,以结尾的文件和文件夹为准

如何删除无法删除的文件和文件夹?

Unix-创建文件夹和文件的路径

从Nautilus复制文件和文件夹路径

在给定的TFS路径下列出源控制文件和文件夹(无工作空间映射)

如何使用rmtree()删除文件夹和文件

Git如何从git删除文件夹和文件?

删除子文件夹和文件的属性

替换/删除文件和文件夹中的正斜杠

Shell脚本删除最旧的文件和文件夹

如何只删除相同的文件和文件夹

为什么只删除某些文件和文件夹?

删除 1 级以下的文件和文件夹

删除程序文件文件夹中的文件和文件夹

删除子文件夹和文件而不删除父文件夹和子文件夹?

如何从给定路径中批量删除最后一个文件夹

如果文件夹日期为30天,则删除文件夹和文件

除了几个特定的文件夹,如何递归删除每个文件和文件夹?

使用VBA删除FTP文件夹中的文件和文件夹

如何永久删除服务和文件夹?

Python:给定路径中的文件夹输出列表