gpt4 book ai didi

php - 尝试取消链接目录时出现 "is a directory"错误

转载 作者:行者123 更新时间:2023-12-04 13:42:19 25 4
gpt4 key购买 nike

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

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

最佳答案

unlink用于删除文件,使用rmdir

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

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

foreach ($dir_files as $username) {

请考虑替代方法。

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

关于php - 尝试取消链接目录时出现 "is a directory"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31812511/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com