file_scan_directory
includes/file.inc, строка 635
- Версии
- 5 – 6
file_scan_directory($dir, $mask, $nomask = array('.', '..', 'CVS'), $callback = 0, $recurse = TRUE, $key = 'filename', $min_depth = 0, $depth = 0)
Ищет все файлы, подходящие к заданной пользователем маске в указанной папке. Папки и файлы имена которых начинаются с точки пропускаются; это ограничение позволяет не затрагивать скрытые файлы и папки (файлы и папки имя которых начинается с точки считаются в ОС Unix скрытыми). Например такие, как служебные папки SVN. В таких папках поиск не проводится.
Параметры
$dir
Базовый путь для сканирования. Допустимы пути вида sites/all/modules. Может работать некорректно (не найти папку), если в пути содержатся национальные символы (русские, украинские и т.п. буквы).
$mask
Регулярное выражения по совпадению с которым будут искаться файлы.
$nomask
Массив содержащий файлы/папки, которые не должны включаться в поиск (должны быть проигнорированы).
$callback
callback функция, которая будет вызываться для каждого найденного файла или папки. В эту функцию передаётся один параметр - имя файла. Вид, в котором callback-функции будет передано имя указывается параметром $key
.
$recurse
Когда TRUE
- поиск будет проводиться не только в переданной папке, но также и во вложенных папках (рекурсивный поиск).
$key
Ключ, который указывает какой результат нужен. Возможны три значения: 'filename'
- результат будет содержать путь к файлу, имя файла и его расширение. 'basename'
- результат будет содержать только имя файла и расширение. 'name'
- результат будет содержать только имя файла без его расширения.
$min_depth
Минимальная вложенность папок для сканирования.
$depth
Текущая глубина рекурсии. Этот параметр используется для внутренних целей и не должен передаваться.
Возвращаемое значение
Ассоциативный массив (keyed on the provided key) of objects with
'path'
, 'basename'
, and 'name'
members corresponding to the
matching files.
Связанные темы
Код
<?php
function file_scan_directory($dir, $mask, $nomask = array('.', '..', 'CVS'), $callback = 0, $recurse = TRUE, $key = 'filename', $min_depth = 0, $depth = 0) {
$key = (in_array($key, array('filename', 'basename', 'name')) ? $key : 'filename');
$files = array();
if (is_dir($dir) && $handle = opendir($dir)) {
while (FALSE !== ($file = readdir($handle))) {
if (!in_array($file, $nomask) && $file[0] != '.') {
if (is_dir("$dir/$file") && $recurse) {
$files = array_merge($files, file_scan_directory("$dir/$file", $mask, $nomask, $callback, $recurse, $key, $min_depth, $depth + 1));
}
elseif ($depth >= $min_depth && ereg($mask, $file)) {
$filename = "$dir/$file";
$basename = basename($file);
$name = substr($basename, 0, strrpos($basename, '.'));
$files[$$key] = new stdClass();
$files[$$key]->filename = $filename;
$files[$$key]->basename = $basename;
$files[$$key]->name = $name;
if ($callback) {
$callback($filename);
}
}
}
}
closedir($handle);
}
return $files;
}
?>
Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии