假设我有一个目录,如下所示:
ABC
|_ a1.txt
|_ a2.txt
|_ a3.txt
|_ a4.txt
|_ a5.txt
如何使用PHP将这些文件名获取到一个数组中,仅限于特定的文件扩展名并忽略目录?
您可以使用glob()函数:
示例01:
<?php
// read all files inside the given directory
// limited to a specific file extension
$files = glob("./ABC/*.txt");
?>
示例02:
<?php
// perform actions for each file found
foreach (glob("./ABC/*.txt") as $filename) {
echo "$filename size " . filesize($filename) . "n";
}
?>
示例03:使用RecursiveIteratorIterator
<?php
foreach(new RecursiveIteratorIterator( new RecursiveDirectoryIterator("../")) as $file) {
if (strtolower(substr($file, -4)) == ".txt") {
echo $file;
}
}
?>
试试这个:
if ($handle = opendir('.')) {
$files=array();
while (false !== ($file = readdir($handle))) {
if(is_file($file)){
$files[]=$file;
}
}
closedir($handle);
}
scandir
列出指定路径内的文件和目录。
以下是基于本文基准测试的最高效方法:
function getAllFiles() {
$files = array();
$dir = opendir('/ABC/');
while (($currentFile = readdir($dir)) !== false) {
if (endsWith($currentFile, '.txt'))
$files[] = $currentFile;
}
closedir($dir);
return $files;
}
function endsWith($haystack, $needle) {
return substr($haystack, -strlen($needle)) == $needle;
}
只需使用getAllFiles()函数,甚至可以修改它以获取所需的文件夹路径和/或扩展名,这很容易。
除了scandir(@miku),您可能还发现glob对通配符匹配很感兴趣。
如果您的文本文件是文件夹中的所有文件,最简单的方法是使用scandir,如下所示:
<?php
$arr=scandir('ABC/');
?>
如果你有其他文件,你应该像劳伦斯的回答一样使用glob。
$dir = "your folder url"; //give only url, it shows all folder data
if (is_dir($dir)){
if ($dh = opendir($dir)){
while (($file = readdir($dh)) !== false){
if($file != '.' and $file != '..'){
echo $file .'<br>';
}
}
closedir($dh);
}
}
输出:
xyz
abc
2017
motopress