2015-11-03 174 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

相關問題