file_scan_directory
includes/file.inc, строка 883
- Версии
- 5 – 6
file_scan_directory($dir, $mask, $nomask = array('.', '..', 'CVS'), $callback = 0, $recurse = TRUE, $key = 'filename', $min_depth = 0, $depth = 0)
Ищет все файлы которые соответствуют заданной маске в заданной директории. Имена файлов начинающиеся с точки исключаются; это предотвращает появление скрытых файлов и каталогов (например, SVN рабочие каталоги) в результатах сканирования.
Параметры
$dir
Директория для сканирования. Без завершающего слеша.
$mask
Регулярное выражение для поиска файла.
$nomask
Массив файлов и директорий которые будут игнорироваться.
$callback
Callback функция для проверки каждого файла.
$recurse
Если TRUE
, директории будут сканироваться рекурсивно.
$key
Используется для возвращаемого массива файлов. Возможные значения: "filename"
, для пути, начиная с $dir
, "basename"
для базового имени файла, и "name"
- для имени файла без расширения.
$min_depth
Минимальная глубина в дереве директорий, начиная с которой файлы будут возвращаться.
$depth
Текущая глубина рекурсии. Этот параметр используется только этой функцией и не должен быть передан.
Возвращаемое значение
Ассоциативный массив объектов с 'path'
, 'basename'
и 'name'
членами соответствуют отобранным файлам.
Связанные темы
Код
<?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) {
// Give priority to files in this folder by merging them in after any subdirectory files.
$files = array_merge(file_scan_directory("$dir/$file", $mask, $nomask, $callback, $recurse, $key, $min_depth, $depth + 1), $files);
}
elseif ($depth >= $min_depth && ereg($mask, $file)) {
// Always use this match over anything already set in $files with the same $$key.
$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;
}
?>
Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии