【发布时间】:2015-11-03 14:22:29
【问题描述】:
我的网站集成了文件管理器和会员系统。
在注册时,会创建一个以会员用户名命名的文件夹,并授予他进入该文件夹的权限(上传文件、创建文件夹、移动文件...等),而文件管理器的其余部分(包括其他会员的文件夹)保持读取状态-只要。
我还是 Php 的新手,当我希望我的成员在其主文件夹的子文件夹中仍然拥有权限时,我遇到了一些麻烦。 有点像这样:
网站/文件管理器/用户/用户名1
网站/文件管理器/用户/用户名1/子文件夹1
网站/文件管理器/用户/用户名1/子文件夹2
我可以通过以下方式在他们的主文件夹中获取我的成员的权限:
<?php
$directory = $_SESSION['cwd'];
$parent_directory = str_replace('\\', '/', dirname($directory));
$user = $_SESSION['simple_auth']['username'];
if ($directory == $parent_directory.'/'.$user){
echo "permissions granted";
}
else {
echo "permissions not granted";
}
?>
它检查用户是否在他的文件夹中并授予他权限(在此处表示为echo "permissions granted",但到目前为止我还找不到在子文件夹中应用此功能的方法。
有没有办法让在我的例子中“授予的权限”也出现在成员的子文件夹中,而不仅仅是在有他们名字的文件夹中?
希望我的要求足够明确,非常感谢您的帮助!
-阿帕提克
更新:
解决方案是使用递归 scandir 函数,当当前目录与扫描的文件夹之一匹配时,该函数将 return true。
function scanDirectory($userdir = '', $directory){
$folders = glob($userdir . '/*' , GLOB_ONLYDIR);
foreach($folders as $folder){
echo($folder.'</br>');
if (($folder == $directory && gator::checkPermissions('r')) || (gator::checkPermissions('ru')) || ($userdir == $directory && gator::checkPermissions('r'))) {
return true;
}
$scan_result = scanDirectory($folder, $directory);
if($scan_result) {
return true;
}
}
return false;
}
scanDirectory($userdir, $directory);
?>
<?php if ($getprivileges == true): ?>
<p>Permissions granted.<p>
<?php endif; ?>
【问题讨论】:
-
您是否查看过本页 RHS 的
Related部分中有关如何递归扫描文件夹/子文件夹的技术的任何建议?也许您可以根据您的要求修改其中之一?这个问题在这里经常被问到和回答。 -
嘿,感谢您的回复,我实际上在几个小时前完成了这个功能,现在它正在工作,我确实使用了递归 scandir 功能!
-
感谢您的指示,现在应该没问题了:)
标签: php