获取目录中的文件

如何使用PHP获取目录内的文件名?

我找不到使用Google的相关命令,所以我希望这个问题能帮助那些按照类似的方式提出要求的人。

有很多方法。 旧的方式是scandirDirectoryIterator可能是最好的方法。

还有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>'; } 

opendirreaddir用法:

 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; 。 另请参阅DirectoryIteratorFilesystemIterator之间的差异问题。

 $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更好的方法。