2015-09-14 85 views
1

我已經在谷歌和本網站上搜索了類似於我想要的東西,但沒有任何東西符合我的要求,並且我所有的努力都無法適應它們,我想製作一個腳本來映射其目錄並其所有子文件夾和文件夾位於子目錄和文件的頂部。到目前爲止,我想出了這一點:PHP嵌套文件樹

<?php 
$rawParent = scandir('.'); 
$parentDir = array_diff($rawParent, array('.', '..','cgi-bin','error_log')); 

$arrayOfDirectories = array(); 
$arrayOfFiles = array(); 

foreach ($parentDir as $child){ 
    if(is_dir($child)){ 
     array_push($arrayOfDirectories,$child); 
    }else{ 
     array_push($arrayOfFiles,$child); 
    } 
} 
foreach ($arrayOfDirectories as $directory){ 
    echo $directory.'<br>'; 
} 
echo "<br>"; 
foreach ($arrayOfFiles as $file){ 
    echo "<a href='".$file."'>".$file.'</a><br>'; 
} 
?> 

這是很好的,但迄今爲止它不僅目錄的第一級,可以將此代碼適用於經過文件夾和它們築巢各級?如果是這樣如何?我需要一些指針,我將進一步使用JavaScript來切換文件夾以查看內容,所以我將需要PHP來輸出嵌套的東西。 對不起,如果我沒有太大的意義,不知道如何解釋。

+0

你在PHP中檢查過scandir()函數嗎? –

+0

以及我在我的第一行代碼中使用它,所以是的 – Toma

回答

1

這樣使用遞歸函數:

<?php 
function list_directory($directory) 
{ 
    $the_directory = opendir($directory) or die("Error $directory doesn't exist"); 
    while($file = @readdir($the_directory)) 
    { 

     if ($file == "." || $file == "..") continue; 


     if(is_dir($directory.'/'.$file)) 
     { 
      print '<ul>'.$directory.'/'.$file; 
      list_directory($directory.'/'.$file); 
      print '</ul>'; 
     } 
     else 
     { 
      print "<li> $file </li>"; 
     } 

    } 

    closedir($the_directory); 
} 

$path_to_search = '/var/www'; 
list_directory($path_to_search); 
?> 

版本與存儲陣列:

<?php 
function list_directory($directory, &$storage) 
{ 
    $the_directory = opendir($directory) or die("Error $directory doesn't exist"); 
    while($file = @readdir($the_directory)) 
    { 

     if ($file == "." || $file == "..") continue; 


     if(is_dir($directory.'/'.$file)) 
     { 
      list_directory($directory.'/'.$file, $storage); 
     } 
     else 
     { 
      $storage[] = $file; 
     } 

    } 

    closedir($the_directory); 
} 
$storage = array(); 
$path_to_search = '/var/www'; 
list_directory($path_to_search, $storage); 
echo '<pre>', print_r($storage,true) , '</pre>'; 
?> 
+0

似乎恰到好處,但它們不是按字母順序排列的?我如何訂購他們? – Toma

+0

在一個數組中使用PHP數組排序函數=) – Fky

+0

可以請給我一個關於如何將它存儲到數組中的技巧?我用return替換了print並嘗試了$ foo = list_directory('。');但它只顯示第一個條目 – Toma

2

這將做你問什麼,它只返回子目錄名稱在給定的路徑,你可以製作超鏈接並使用它們。

$yourStartingPath = "your string path"; 
    $iterator = new RecursiveIteratorIterator( 
     new RecursiveDirectoryIterator($yourStartingPath), 
    RecursiveIteratorIterator::SELF_FIRST); 

    foreach($iterator as $file) { 
    if($file->isDir()) { 
     $path = strtoupper($file->getRealpath()) ; 
     $path2 = PHP_EOL; 
     $path3 = $path.$path2; 
     $result = end(explode('/', $path3)); 
     echo "<br />". basename($result); 
     } 
    } 
+0

我得到了一個「嚴格的標準:只有變量應通過參考/data/luci/public_html/index.php第12行參考」 – Toma