【发布时间】: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 中删除文件之前的文件夹。删除文件然后删除文件夹 - 取消链接是针对文件,而不是文件夹 - 参考:php.net/manual/en/function.unlink.php - php.net/manual/en/function.rmdir.php - php.net/manual/en/function.chmod.php
-
但是,您可以通过 ftp 来实现这一点,但我现在无法确认这一点。编辑:如果你想走那条路,可以通过 ftp stackoverflow.com/a/8595188 找到一个解决方案。
-
更新代码;如果你有linux服务器,你可以试试
exec('rm -R ' . $dirname)。exec允许你执行 shell 命令。 php.net/manual/en/function.exec.php -
作者更新注意:glob不返回隐藏文件,所以最好使用scandir。
标签: php