最好的方式来获取从一个特定的扩展名在一个目录过滤的文件在php中

可能重复:
目录中特定文件的PHP列表
使用PHP的scandir($迪尔),并只得到图像!

所以现在我有一个目录,我正在得到一个文件列表

$dir_f = "whatever/random/"; $files = scandir($dir_f); 

但是,这将检索目录中的每个文件。 我如何才能以最有效的方式检索具有特定扩展名的文件,例如.ini。

PHP有一个很棒的function,可以帮助你只捕获你需要的文件。 其被称为glob()

glob – 查找匹配模式的path名

这里是一个示例用法 –

 $files = array(); foreach (glob("/path/to/folder/*.txt") as $file) { $files[] = $file; } 

参考 –

  • glob()

PHP的glob()函数让你指定一个模式来search。

如果您希望search多个扩展名,则preg_grep()是用于筛选的替代方法:

  $files = preg_grep('~\.(jpeg|jpg|png)$~', scandir($dir_f)); 

虽然glob有一个类似的额外语法。 如果你有更多的条件,这是非常有意义的,为不区分大小写的添加~i标志,或者可以过滤组合列表。

你可以尝试使用GlobIterator

 $iterator = new \GlobIterator(__DIR__ . '/*.txt', FilesystemIterator::KEY_AS_FILENAME); $array = iterator_to_array($iterator); var_dump($array) 

glob($ pattern,$ flags)

 <?php foreach (glob("*.txt") as $filename) { echo "$filename size " . filesize($filename) . "\n"; } ?> 

尝试这个

 //path to directory to scan $directory = "../file/"; //get all image files with a .txt extension. $file= glob($directory . "*.txt "); //print each file name foreach($file as $filew) { echo $filew; $files[] = $filew; // to create the array } 

还没有testing正则expression式,但是这样的事情:

 if ($handle = opendir('/file/path')) { while (false !== ($entry = readdir($handle))) { if (preg_match('/\.txt$/', $entry)) { echo "$entry\n"; } } closedir($handle); }