我想打开一个目录并阅读其中的所有文件并将它们放入array
,到目前为止我有:
$imagesdir = $CFG->dataroot.'/1/themeimages/';
这给了我目录的路径,下一步是什么?
答案 0 :(得分:2)
解决方案是使用opendir
+ readdir
+ closedir
(引用第一页中的示例):
$imagesdir = $CFG->dataroot.'/1/themeimages/';
if ($handle = opendir($imagesdir)) {
while (false !== ($file = readdir($handle))) {
if ($file != "." && $file != "..") {
echo "$file\n";
}
}
closedir($handle);
}
另一种解决方案是使用the [DirectoryIterator
class;引用4 __construct
页面中的示例:
$imagesdir = $CFG->dataroot.'/1/themeimages/';
$dir = new DirectoryIterator($imagesdir);
foreach ($dir as $fileinfo) {
if (!$fileinfo->isDot()) {
var_dump($fileinfo->getFilename());
}
}
当然,在每种情况下,您不必只是回显或转储文件的名称,而是必须将其放入数组中。
这意味着在循环之前初始化数组:
$list_files = array();
并且,在循环内部,使用类似于这两行中的一行,具体取决于您选择的解决方案:
$list_files[] = $file;
$list_files[] = $fileinfo->getFilename();
答案 1 :(得分:2)
只需使用内置函数scandir:
从目录中返回文件和目录的数组。
所以你会像这样使用它:
$array = scandir($imagesdir);
当然你也可以使用DirectoryIterator,但这更简单。
您还可以删除点文件:
$array = array_diff(scandir($imagesdir), array('.', '..'));
答案 2 :(得分:2)
因为从你的标签列表中我假设你正在使用Moodle,你可以简单地使用:
function get_directory_list($rootdir, $excludefiles='', $descend=true, $getdirs=false, $getfiles=true)
该功能包含在 moodlelib.php 。
中阅读文档:
- 返回包含所有内容的数组 *所有子目录中的文件名, 相对于给定的rootdir。
有关可选参数的详细信息,请参阅官方文档。
filelib.php 中也提供了读取文件内容的功能。
答案 3 :(得分:1)
对于更多面向对象的方法,请使用DirectoryIterator类。
$images = array();
$imagesdir = $CFG->dataroot.'/1/themeimages/';
foreach (new DirectoryIterator($imagesdir) as $file) {
if($file->isDot()) continue;
$images[] = $file;
}
答案 4 :(得分:1)
如果您以后还需要过滤器,这是最短的解决方案:
$imagesdir = $CFG->dataroot.'/1/themeimages/*.*';
foreach (glob($imagesdir) as $file)
array_push($files,$file);
php会自动排除.
和..
如果您不需要所有文件,也可以指定自己的面具,如上面*.*
所示
php还会自动为您创建$files
数组。
最后一行也可以是:
$files[]=$file;