递归目录链接构建

时间:2014-02-04 20:35:42

标签: php function recursion sitemap dir

经过一些帮助后,我有了这个递归功能,可以很好地完成它,但是我需要它来创建一个文件链接。

目前该函数只能存储$ dir / $ file.php,我需要它来循环创建完整路径。

    function siteMap($dir){         

            $scan = scandir($dir);

            foreach ($scan as $file) {
                if ($file === '.' or $file === '..' or $file === '.DS_Store') continue;

                echo '<a href="../' . $file . '">' . $file . '</a><br>';

                if (is_dir($dir . '/' . $file)) {
                    siteMap($dir . '/' . $file);
                }           
            }
        }


        siteMap('application/view');

如您所见,这将遍历目录中的所有文件夹和文件,并通过链接将其打印到屏幕上。我将尝试包含我的文件结构。

-root(应用/视图)
--site [+]
--- about.php
--- new.php
--product [+]
--- view.php
--- all.php
---的search.php

我想基本上创建一个动态站点地图,所以每次添加它的新目录或文件都会包含在站点地图中时,这需要打印父目录和内容文件作为链接。

2 个答案:

答案 0 :(得分:0)

您可以根据需要进行自定义。看看https://stackoverflow.com/questions/22986093/cannot-loop-through-directories/22986256#22986256

function readDirs($path){
  $dirHandle = opendir($path);
  while($item = readdir($dirHandle)) {
    $newPath = $path."/".$item;
    if(is_dir($newPath) && $item != '.' && $item != '..') {
       echo "Found Folder $newPath<br>";
       readDirs($newPath);
    }
    else{
      echo '&nbsp;&nbsp;Found File or .-dir '.$item.'<br>';
    }
  }
}

$path =  "/";
echo "$path<br>";

readDirs($path);

答案 1 :(得分:0)

PHP内置RecursiveDirectoryIterator类,用于for iterating recursively over filesystem directories. 这比递归函数快。 下面的代码正在我的Windows系统上运行。只需更改$path即可。它将链接您的所有文件并列为TREE结构。

<?php

$path = realpath('\\\\local\\tech\\projects\\');

echo "<pre>";

$objects = new RecursiveIteratorIterator($RDI = new RecursiveDirectoryIterator($path), RecursiveIteratorIterator::SELF_FIRST);
$i=0;
foreach($objects as $name => $object){


    $abspath = str_replace('\\','/',strtolower($name)) ;    
    if($object->isDir()) {

          echo str_repeat("&nbsp;",$i*2) . "<a href='file:///".$abspath ."/' target='_blank'>" .basename($name) . "</a> \n";
          $i++;     
    }
    else {
          echo str_repeat("&nbsp;",$i*2) . "<a href='file:///".$abspath ."' target='_blank'>" .basename($name) . "</a> \n";
    }
    if($RDI->hasChildren() == false ) {
        $i = 0 ; 
    }
}

&GT;