php将目录和子目录列为超级链接,并为新文件夹提供选项



我正在尝试列出WAMP服务器WWW目录中的所有文件夹,并可以选择为每个"组"子目录创建一个新文件夹作为超链接列表。我知道下面的代码(见文章底部)目前不符合HTML标准,我将在下面的代码正常工作后添加页眉和页脚。

目前,以下内容作为以下脚本的输出出现(见文章底部):

www
applied
images
NEW FOLDER
templates
NEW FOLDER
NEW FOLDER
coob
includes
NEW FOLDER
NEW FOLDER
NEW FOLDER

当我希望输出的格式为:

www
applied
images
templates
NEW FOLDER
coob
includes
NEW FOLDER
NEW FOLDER
NEW FOLDER

我知道要列出每个目录中的子目录,你需要一个递归函数。我已经将"随机"文本">/>N_F-H:L:A-T_T<<"添加到数组中,因为它包含多个操作系统中目录名中不允许的多个符号。-这是一个不应该被视为目录并显示NEW FOLDER超链接的事件。我不明白为什么当你运行这个脚本时,NEW FOLDER项目会出现在子目录列表中的每个项目上,而不是每个子目录组只出现一次。为什么会这样?我如何才能达到预期的输出?

<style type="text/css">
ul.dirlist, ul.dirlist li
{
list-style-type: none;
padding-left: 1em;
}
</style>
<?php
function ListFolder($path, $default_dir)
{
$dircontents = scandir($path);
$dircontents[] = ">/>N_F-H:L:A-T_T<<";
$dirref = str_replace($default_dir . DIRECTORY_SEPARATOR, "", $path);
//Leave only the lastest folder name
$dirpaths = explode(DIRECTORY_SEPARATOR, $path);
$dirname = end($dirpaths);
echo "<ul class='dirlist'>";
echo "<li><a href=test.php?path=".$dirref.">".$dirname."</a>";
foreach($dircontents as $key => $dir)
{
if($dir == ">/>N_F-H:L:A-T_T<<")
{
echo "<li>NEW FOLDER</li>";
}
else
{
if($dir != "." AND $dir != "..")
{
if(is_dir($path . DIRECTORY_SEPARATOR . $dir))
{
Test($path.DIRECTORY_SEPARATOR.$dir, $default_dir);
}
}
}
}
//close list
echo "</li>";
echo "</ul>";
}
$www_dir = dirname(dirname(__FILE__));
$www_dir_parts = explode(DIRECTORY_SEPARATOR , $www_dir);
if(in_array('www', $www_dir_parts))
{
$wwwkey = array_search('www', $www_dir_parts);
}
elseif(in_array('htdocs', $www_dir_parts))
{
$wwwkey = array_search('htdocs', $www_dir_parts);
}
else
{
$cancel = 1;
//do nothing
}
//if the script hasn't been canceled
if(! isset($cancel))
{
$i = 0;
//default_dir as nothing to begin with
$default_dir = "";
$default_dir_www = "";
while($i <= $wwwkey)
{
//create path to absolute directory path of www
$default_dir .= $www_dir_parts[$i] . DIRECTORY_SEPARATOR;
//increment i
$i++;
}
$i = 0;
while($i <= ($wwwkey - 1))
{
//create path to absolute directory path of www
$default_dir_www .= $www_dir_parts[$i] . DIRECTORY_SEPARATOR;
//increment i
$i++;
}
$default_dir_www = rtrim($default_dir_www, DIRECTORY_SEPARATOR);
$default_dir = rtrim($default_dir, DIRECTORY_SEPARATOR);
}
ListFolder($default_dir, $default_dir_www);
?>

尝试下面的函数而不是

function ListFolder($path, $default_dir){
$dircontents = scandir($path);
$dirref = str_replace($default_dir . DIRECTORY_SEPARATOR, "", $path);
$havesub = false;
echo "<ul class='dirlist'>";
foreach($dircontents as $key => $dir)
{
if($dir != "." AND $dir != "..")
{
if(is_dir($path . DIRECTORY_SEPARATOR . $dir))
{
echo "<li><a href=test.php?path=".$dirref.">".$dir."</a>";
ListFolder($path.DIRECTORY_SEPARATOR.$dir, $default_dir);
echo "</li>";
$havesub = true;
}
}
}
echo ($havesub) ? "<li>NEW FOLDER</li>" : '';
echo "</ul>";
}

最新更新