Как получить имя файла в папке? - PullRequest
7 голосов
/ 04 июня 2011

Предположим, у меня есть каталог, похожий на:

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

Как я могу использовать PHP для получения этих имен файлов в массив, ограниченный определенным расширением файла и игнорирующий каталоги?

Ответы [ 7 ]

13 голосов
/ 04 июня 2011

Вы можете использовать функцию 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;
  }
}
?>
2 голосов
/ 04 июня 2011

Попробуйте это:

if ($handle = opendir('.')) {
    $files=array();
    while (false !== ($file = readdir($handle))) {
        if(is_file($file)){
            $files[]=$file;
        }
    }
    closedir($handle);
}
1 голос
/ 24 сентября 2013

Вот наиболее Эффективный способ, основанный на тестах статьи :

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 (), и вы можете дажеизменить его так, чтобы он указывал путь к папке и / или необходимые расширения, это просто.

1 голос
/ 04 июня 2011

scandir перечисляет файлы и каталоги внутри указанного пути.

0 голосов
/ 22 июля 2017
$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
0 голосов
/ 04 июня 2011

Если ваши текстовые файлы - это все, что у вас есть внутри папки, самый простой способ - использовать scandir, например так:

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

Если у вас есть другие файлы, вы должны использовать glob, как в ответе Лоуренса.

0 голосов
/ 04 июня 2011

Кроме scandir (@miku), вы также можете найти glob интересным для подстановочных знаков.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...