如何获取文件夹下的文件名?

时间:2011-06-04 01:39:39

标签: php file

假设我有一个目录:

ABC
|_ a1.txt
|_ a2.txt
|_ a3.txt
|_ a4.txt
|_ a5.txt

如何使用PHP将这些文件名转换为数组,仅限于特定的文件扩展名并忽略目录?

7 个答案:

答案 0 :(得分:13)

您可以使用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;
  }
}
?>

答案 1 :(得分:2)

试试这个:

if ($handle = opendir('.')) {
    $files=array();
    while (false !== ($file = readdir($handle))) {
        if(is_file($file)){
            $files[]=$file;
        }
    }
    closedir($handle);
}

答案 2 :(得分:1)

scandir列出指定路径中的文件和目录。

答案 3 :(得分:1)

这是基于此article基准测试的最强高效方式:

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()函数,您甚至可以修改它以获取所需的文件夹路径和/或扩展名,这很容易。

答案 4 :(得分:0)

除了scandir(@miku)之外,您还可能会发现glob对于通配符匹配很有意思。

答案 5 :(得分:0)

如果您的文本文件是文件夹中的所有内容,最简单的方法是使用scandir,如下所示:

<?php
$arr=scandir('ABC/');
?>

如果你有其他文件,你应该像劳伦斯的答案一样使用glob。

答案 6 :(得分:0)

$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