使用PHP递归生成指向所有文件,目录和子目录的链接列表

时间:2014-02-12 14:37:49

标签: php

在特定目录中list all files and directories很容易。

如何以递归方式执行相同的任务?也就是说,从给定目录开始,生成一个指向所有文件和目录的链接列表,包括目录树每个级别的子文件夹中的那些文件和目录?例如:

  • mydir\
  • mydir\file.php
  • mydir\sub1\
  • mydir\sub1\file2.php
  • mydir\sub1\sub2\
  • mydir\sub1\sub2\file3.php
  • mydir\sub3\

......等等。

2 个答案:

答案 0 :(得分:1)

你会想要几乎一样(通过使用dir类或opendir函数)。 但是,不要只运行1个directoy,而是创建一个完全正确的函数。然后,在该函数中,使用filetype()函数检查迭代中的当前项是否是目录,并再次在该目录上运行函数,从而生成所谓的递归函数< /强>

现在,只需启动您想要列出的基本目录的功能,它将根据您的需要浏览所有子目录。

常见错误:

  • 确保捕获并排除“。”和“..”目录。
  • 确保在递归调用上附加斜杠,以便您的路径正确。

修改 实际上,DanFromGermany上面的回答非常好。 如果您愿意依赖底层操作系统功能, if 您知道您的脚本将始终用于具有{{1}的Unix / Linux / BSD系统},你会想要使用那个。

答案 1 :(得分:0)

代码:

<?php
$target  = './files/';
$exclude = array(
    $target,
    'secret_file.jpg',
);
$files   = explode(PHP_EOL, exec('find ' . $target));
foreach ($files as $file) {
    if (!in_array($file, $exclude)
     && !in_array(str_replace($target, $file), $exclude) {
        echo '<a href="' . $file . '>' . $file . '</a>';
    }
}

(适用于Linux,如果启用了exec

exec('find ./files/')为您提供如下输出:

[root@giant.flowl.info]# find ./cron/
./cron/
./cron/cron.php
./cron/temp/session.tmp
./cron/temp/test/temp.jpg