目前,我有一个文件夹并且正在获取文件列表。
$dir_f = "whatever/random/";
$files = scandir($dir_f);
然而,那会检索目录中的每个文件。如何以最有效的方式检索只有特定扩展名(例如 .ini)的文件?
目前,我有一个文件夹并且正在获取文件列表。
$dir_f = "whatever/random/";
$files = scandir($dir_f);
然而,那会检索目录中的每个文件。如何以最有效的方式检索只有特定扩展名(例如 .ini)的文件?
PHP有一个非常好的函数可以帮助您仅捕获需要的文件。它被称为glob()
glob - 查找与模式匹配的路径名
返回包含匹配的文件/目录的数组,如果没有文件匹配,则返回空数组或者在错误时返回FALSE。
以下是一个示例用法 -
$files = glob("/path/to/folder/*.txt");
这将使用给定路径中匹配*.txt
模式的所有文件填充$files
变量。
参考文献 -
$files = glob("/path/to/folder/*.txt")
而不需要使用for
循环呢?我认为这是一样的。 - Mohamad Osamapreg_grep()
是过滤的替代方法: $files = preg_grep('~\.(jpeg|jpg|png)$~', scandir($dir_f));
glob
虽然有类似的额外语法,但这种语法更多地是在您需要进一步条件、添加~i
标志以进行不区分大小写筛选或可以筛选组合列表的情况下使用。
glob("{$dir}*.{jpg,jpeg,gif,ico,png}", GLOB_BRACE)
。这也适用于多个扩展名。 - Savas VedovaGlobIterator
。$iterator = new \GlobIterator(__DIR__ . '/*.txt', FilesystemIterator::KEY_AS_FILENAME);
$array = iterator_to_array($iterator);
var_dump($array);
<?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
}
.text
扩展名的文件。 - Madara's Ghost我还没有测试过这个正则表达式,但应该是类似这样的:
if ($handle = opendir('/file/path')) {
while (false !== ($entry = readdir($handle))) {
if (preg_match('/\.txt$/', $entry)) {
echo "$entry\n";
}
}
closedir($handle);
}
scandir
。 - Korvin Szantoglob
比scandir
更好。 - Francois Deschenesglob("*.txt")
:http://us3.php.net/manual/en/function.glob.php - Michael Berkowski