获取目录中的文件
如何使用PHP获取目录内的文件名?
我找不到使用Google的相关命令,所以我希望这个问题能帮助那些按照类似的方式提出要求的人。
有很多方法。 旧的方式是scandir
但DirectoryIterator
可能是最好的方法。
还有readdir
(用于opendir
)和glob
。
下面是一些如何使用每个打印当前目录中的所有文件的例子:
DirectoryIterator
用法:(推荐)
foreach (new DirectoryIterator('.') as $file) { if($file->isDot()) continue; print $file->getFilename() . '<br>'; }
scandir
用法:
$files = scandir('.'); foreach($files as $file) { if($file == '.' || $file == '..') continue; print $file . '<br>'; }
opendir
和readdir
用法:
if ($handle = opendir('.')) { while (false !== ($file = readdir($handle))) { if($file == '.' || $file == '..') continue; print $file . '<br>'; } closedir($handle); }
glob
使用情况:
foreach (glob("*") as $file) { if($file == '.' || $file == '..') continue; print $file . '<br>'; }
正如在评论中提到的, glob
是很好的,因为我使用的星号实际上可以用来匹配文件,所以glob('*.txt')
会得到文件夹中的所有文本文件, glob('image_*')
会得到所有以image_开头的文件
保罗Bergantino的答案是好的,但现在已经过时了!
请考虑下面的官方方式来获取目录中的文件。
FilesystemIterator
与其祖先DirectoryIterator
相比, FilesystemIterator
具有许多新特性,例如避免if($file->isDot()) continue;
的语句的可能性if($file->isDot()) continue;
。 另请参阅DirectoryIterator
和FilesystemIterator
之间的差异问题。
$it = new FilesystemIterator(__DIR__); foreach ($it as $fileinfo) { echo $fileinfo->getFilename() , PHP_EOL; }
RecursiveDirectoryIterator
这个片段列出了所有子目录中的PHP文件。
$dir = new RecursiveDirectoryIterator(__DIR__); $flat = new RecursiveIteratorIterator($dir); $files = new RegexIterator($flat, '/\.php$/i'); foreach($files as $file) { echo $file , PHP_EOL; }
请参阅Wrikken的答案 。
旧的方法是:
<?php $path = realpath('.'); // put in your path here $dir_handle = @opendir($path) or die("Unable to open $path"); $directories = array(); while ($file = readdir($dir_handle)) $directories[] = $file; closedir($dir_handle); ?>
如前所述,目录迭代器可能是PHP 5更好的方法。