Обработка всех файлов в каталоге

Задача
Необходимо выполнить цикл по всем файлам в каталоге. Например, требуется создать элемент select в форме, содержащей список всех файлов в каталоге.

Решение
Получите дескриптор каталога с помощью функции opendir(), а затем извлеките имя каждого файла, вызвав функцию readdir():

$d = opendir('/tmp') or die($php_errormsg);
while (false !== ($f = readdir($d))) {
print "$f\n";
}
closedir($d);

Обсуждение
Фрагмент кода в разделе «Решение» проверяет возвращенное функцией readdir() значение с помощью оператора тождественного неравенства (!==), поэтому этот код работает с именами файлов, которые могут программно интерпретироваться как false, например, если имя файла 0.

Функция readdir() возвращает любой элемент каталога – является ли он файлом, каталогом или чем-нибудь еще (например, ссылкой или сокетом). Сюда же входят метаэлементы «.» (текущий каталог) и «..» (родительский каталог). Для того чтобы вернуть только файлы, вызовите также функцию is_file():

print '';

Функция readdir() возвращает только имя файла каждого вхождения каталога, а не полное имя пути, поэтому необходимо предварять именем каталога переменную $f, прежде чем передавать ее функции is_file().

В PHP есть также объектно-ориентированный интерфейс к информации каталога. Функция dir() возвращает объект, в котором можно вызвать методы read(), rewind() и close(), действующие подобно функци-ям readdir(), rewinddir() и closedir(). У него есть также свойство $path, содержащее полное имя пути к открытому каталогу.

Ниже показано, как выполнить цикл по файлам с помощью объектноориентированного интерфейса:

print '
Оцените статью: (0 голосов)
0 5 0

Статьи из раздела PHP на эту тему:
Изменение прав доступа к файлу или его владельца
Копирование и перемещение файла
Обработка всех файлов в каталоге
Получение и установка меток даты/времени файла
Получение информации о файле

Вернуться в раздел: PHP / 19. Каталоги