【问题标题】:Target a Folder and all his child-folders/subfolders定位文件夹及其所有子文件夹/子文件夹
【发布时间】: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


【解决方案1】:

您可以做的是使用scandir 扫描目录。它返回一个包含每个目录和文件的数组。然后您可以执行foreach 以授予每个文件和目录的完全权限。

也许php.net scandir documentation 上的解决方案适合你。

【讨论】:

  • 感谢您的回答,我实际上已经想出了解决方案,几个小时前我刚刚完成了这个函数,实际上我在递归函数中使用了 scandir,然后在当前返回 true目录与“允许的文件夹”之一匹配。
【解决方案2】:

解决方案是使用递归 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; ?>

更多详情请关注this thread

【讨论】:

    猜你喜欢
    • 2015-02-16
    • 2017-04-06
    • 1970-01-01
    • 2019-01-02
    • 1970-01-01
    • 2019-06-19
    • 1970-01-01
    • 2016-07-24
    • 1970-01-01
    相关资源
    最近更新 更多