2015-11-03 176 views
0

我的网站将文件管理器与成员系统集成在一起。定位文件夹及其所有子文件夹/子文件夹

在注册时,会创建一个由成员用户名命名的文件夹,并将其中的权限(上载文件,创建文件夹,移动文件等)保留下来,而其余文件管理器(包括其他成员的文件夹)仍保留只读。

我还是一个新的Php,并且当我希望我的成员在其主文件夹的子文件夹中仍具有权限时,目前遇到了一些麻烦。 有点像这样:

网站/文件管理/用户/用户名1

网站/文件管理/用户/用户名1/subfolder1

网站/文件管理/用户/用户名1/subfolder2

我可以通过以下方式在主文件夹中获得我的成员的权限:

<?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",但到目前为止我找不到在子文件夹中应用此方法的方法。

有没有办法让我的例子“权限授予”也会出现在成员的子文件夹中,而不仅仅是在他们的名字的文件夹?

希望我的要求很清楚,非常感谢您的帮助!

-Apatik

更新:

溶液使用,将return true当当前目录是匹配所扫描的文件夹中的一个递归函数SCANDIR。

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; ?> 
+1

您是否查看了本页RHS上“相关”部分中有关如何递归扫描文件夹/子文件夹的技巧的建议?也许你可以根据你的要求修改其中的一个?这个问题在这里经常被问及得到回答。 –

+0

嘿,感谢回复,几个小时前我真的完成了这个功能,现在它正在工作,我确实使用了一个递归的scandir函数! – apatik

+0

感谢您的指示,现在应该没问题:) – apatik

回答

1

解决方案使用了递归的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

1

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

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

+0

感谢您的回答,我确实已经找到了解决方案,几个小时前我刚刚完成了该功能,实际上我使用了scandir作为递归函数,然后返回当前目录与其中一个“允许的文件夹”匹配时为'true'。 – apatik

相关问题