可能重复:
PHP - Iterate through folders and display HTML contents
使用PHP,我正在尝试创建一个脚本,该脚本将导航到网站的根目录,并从那里使用scandir()
或glob()
(那些是唯一的目录扫描功能我我已经学会了,我会使用递归方法浏览根目录中的所有项目,然后在遇到通过is_dir($fileName)
测试成为目录的条目时重新调用自身。
这是我遇到问题的地方 - 当我到达一个目录条目时,它正确地将if语句正确导航到目录的命令,但是在调用自身时,我似乎无法获得glob()
目录权限,因为每次调用它时,页面都会停止加载任何内容。我试图弄清楚,从扫描目录的相对基于URL的性质我将如何引用它。我设置了一个变量$ROOT_DIR
,它是相对于php页面所在目录的根目录(在本例中为$ROOT_DIR="../../"
),然后我会从逻辑上思考,我会用$ ROOT_DIR调用scanAllFiles [我的站点地图方法]。 $ fileName,在从字符串中删除前导"../../"
之后,这是找到的目录的字符串。尝试之后,它不起作用。
我应该使用不同的目录遍历方法来执行此操作,还是我不正确地格式化方法调用?
答案 0 :(得分:2)
大多数人只是使用MySQL制作站点地图,手动执行。
公开文件不安全,但您可以添加某些安全性。
<?php
function files($dir=".") {
$blacklist = array(str_replace("/","",$_SERVER['SCRIPT_NAME']), 'admin.php', 'users.txt', 'secret.txt');
$return = array();
$glob1 = glob($dir."/*");
for($i=0;$i<=count($glob1)-1;$i++) {
$item = $glob1[$i];
$nodir = str_replace($dir, "", $item);
if(is_dir($item)) {
$file1 = explode('/', $item);
$file = $file1[count($file1)-1];
$merge = array_merge($return, files($item));
if(!in_array($file, $blacklist) and !empty($nodir)) $return = $merge;
}
else {
$file1 = explode('/', $item);
$file = $file1[count($file1)-1];
if(!in_array($file, $blacklist) and !empty($nodir)) $return[] = str_replace("./","",$item);
}
}
return $return;
}
// Use like this:
$files = files(); // Get all files from top folder down, no traling slash ...
for($i=0;$i<=count($files)-1;$i++) { // ... Go through them ...
echo "<li>$files[$i]</li>"; // ... And echo the item
}
?>