2010-12-22 68 views
0

我有文件的數組,看起來像這樣:如何基於允許用戶查看哪些文件構建此文件樹?

Array 
(
    [0] => Array 
     (
      [type] => folder 
      [path] => RootFolder 
     ) 

    [1] => Array 
     (
      [type] => file 
      [path] => RootFolder\error.log 
     ) 

    [2] => Array 
     (
      [type] => folder 
      [path] => RootFolder\test 
     ) 

    [3] => Array 
     (
      [type] => file 
      [path] => RootFolder\test\asd.txt 
     ) 

    [4] => Array 
     (
      [type] => folder 
      [path] => RootFolder\test\sd 
     ) 

    [5] => Array 
     (
      [type] => file 
      [path] => RootFolder\test\sd\testing.txt 
     ) 
) 

我分析這個數組和創建像基於文件的深度(「/」計數)視圖中的樹。它看起來像這樣:

RootFolder 
    - error.log 
    - test 
     - asd.txt 
     - sd 
      - testing.txt 

我現在已經是文件路徑,允許用戶查看的數組。構建上面的樹時,我需要考慮這個數組。該數組是這樣的:

Array 
(
    [0] => Array 
     (
      [filePath] => RootFolder\test\sd 
     ) 

    [1] => Array 
     (
      [filePath] => RootFolder\error.log 
     ) 

) 

這將是容易做if in_array($path, $allowed)但這不會給我的樹。只是一個文件列表...

我難住的另一部分是這樣的要求:如果用戶有權查看文件夾test,然後他們有權訪問該文件夾的所有孩子。

我的想法是簡單地解析文件路徑。例如,我確認RootFolder\test\sd是一個目錄,然後根據'/'計數創建一棵樹。就像我之前做的那樣。然後,因爲這是一個目錄,我會將這個目錄中的所有文件都提取出來並顯示給用戶。但是,我無法將其轉換爲工作代碼...

任何想法?

回答

0
$tree = array(); 
// keep one: 
$permNeeded = '?'; //something you're searching for exactly 
$permNeeded = array('?', '?'); // multiple allowed perms 
// be carefull with octal data checking permisions! 

function checkPerms($permFileHas){ 
    // keep one: 
    return $permFileHas==$permNeeded; 
    return in_array($permFileHas, $permNeeded); 
} 

function parseDir($dir){ 
    $contents = scandir($dir); 
    foreach($contents as $file){ 
     if(in_array($file, array('.', '..')){ 
      continue; // skip . and .. 
     } 
     if(is_dir($file)){ 
      parseDir($file); 
      continue; 
     } 
     if(checkPerms(fileperms($file)){ 
      $tree[] = $dir.DIRECTORY_SEPARATOR.$file; 
     } 
    } 
} 

parseDir('/the/dir/user/have/perms'); 

這應該做的伎倆:)

相關問題