从扫描目录打印html列表,包括子目录php

时间:2014-07-16 05:40:29

标签: php list recursion

我正在尝试从包含子目录的扫描目录创建导航列表。 我想要的是一个包含该文件的导航列表。此外,当单击目录以包含自定义目录文件时。

这就是我所取得的成就。

1)使用递归函数扫描目录和子目录并打印html列表。

2)使用递归函数扫描目录和子目录以获取文件路径。

3)请求页面变量并将页面值与名称值匹配,然后将inc路径指向文件。

我遇到的问题。

1)我无法确定什么是目录,什么是返回数组的文件

2)我无法在循环中控制页面错误文件 - 返回多个404。

#select目录     $ dir ='页面';

function listFolderFiles($dir){
  $files = scandir($dir);
# place value home in first position of array
  $home = 'home.php';
  $search_home = array_search($home, $files);
  if ($search_home > 0) {
    unset($files[$search_home]);
    array_unshift($files, $home);
  }

  echo "<ul class='cf nav nav--horiz'>";

  foreach($files as $file){
  # remove extension from files
    $parts = pathinfo($file);
    $name  = $parts['filename'];
  # remove underscore from file name and replace with space.
    $search = array('_' ,'-');
    $replace = " ";
    $str_name = str_replace($search, $replace, $name);

    if($file != '.' && $file != '..'){
      echo '<li>'.'<a href="?page='.$name.'">'.$str_name.'</a>';
      if(is_dir("$dir/$file")){ listFolderFiles("$dir/$file"); }
      echo "</li>";
    }
  }
  echo '</ul>';
} # end function

function find_all_files($dir) {
  $root = scandir($dir);

  foreach($root as $value) {
    if($value === '.' || $value === '..') {continue;}
    if(is_file("$dir/$value")) {$result[]="$dir/$value";continue;}
    foreach(find_all_files("$dir/$value") as $value){
      $result[]=$value;
    }
  }
  return $result;
} # end function 

# call the function and print inside nav
  echo "<nav class='navBar'>";
    listFolderFiles($dir);
  echo "</nav>";

# call the function and pass the result to array
  $allFiles = find_all_files($dir);

# check the query string to see if page is set
  $page = isset($_REQUEST['page']) ? $_REQUEST['page'] : '';

# loop through and match the page var with array value
  foreach ($allFiles as $file) {
# remove extension from files
  $parts = pathinfo($file);
  $name  = $parts['filename'];
  if($page == $name) {
    include($file);
  }
}

0 个答案:

没有答案