2015-09-14 47 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