【发布时间】:2011-04-23 04:39:50
【问题描述】:
我如何使用 php 列出文件夹及其子文件夹中的所有文件
【问题讨论】:
我如何使用 php 列出文件夹及其子文件夹中的所有文件
【问题讨论】:
您是在谈论作为其自己的程序或 Web 应用程序运行的 php 脚本。为什么需要这样做?
echo shell_exec('find -name *');
但是你真的可以在 shell 中运行它。
如果您希望 Web 应用程序运行此脚本,www-data 将需要权限才能运行该脚本,让它这样做是非常不安全的。相反,您可以让具有适当权限的用户登录并执行此操作。没那么不安全。
【讨论】:
您可以编写一个脚本以使用数组中的 php scandir 获取文件夹(和子文件夹)中的所有文件。然后您可以在该数组中搜索您的特定文件。
示例:
<?php
$dir = '/tmp';
$files = scandir($dir);
print_r($files);
?>
输出如下内容:
Array
(
[0] => .
[1] => ..
[2] => bar.php
[3] => foo.txt
[4] => somedir
)
【讨论】:
您可以使用 SPL 迭代器。特别是RecursiveDirectoryIterator,它将递归遍历给定的目录结构。
像这样:
$realpath = realpath('/path/to/file');
$fileObjects = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($realpath),
RecursiveIteratorIterator::SELF_FIRST);
foreach($fileObjects as $key => $object){
if($object->getFilename() === 'filename.png') {
echo $object->getPathname();
}
}
SELF_FIRST 迭代模式基本上告诉迭代器先放置父项(父项先放置)。
【讨论】:
SELF_FIRST 对于仅列出文件并不是特别有用,并且可能会混淆 OP。
如果您希望能够为所有 txt 文件指定掩码或其他内容,例如 *.txt,那么没有比“glob”更好的功能了 :)
【讨论】: