В данном уроке мы разберемся с типовой задачей, которая возникает во время работы над проектом PHP: получение списка файлов и директорий. Обсудим несколько базовых и более изощренных подходов, с перечисление плюсов и минусов каждого. Первые три решения будут использовать типовые функции PHP, а затем представим более надежное с применением итераторов SPL.
Для предметного обсуждения решения и демонстраций предположим, что структура директорий имеет следующий вид:
Базовые решения
Первый набор решений основан на использовании функции glob()
, комбинации функций opendir()
, readdir()
и closedir()
, и также функции scandir()
.
Использование glob()
Первое решение базируется на использовании функции glob(),
которая позволяет выполнять поиск пути с помощью шаблонов. Функция имеет два параметра:
$pattern
(обязательный): шаблон поиска$flags
(опциональный): один или несколько флагов, описание которых можно найти в документации
Рассмотрим примеры. Для поиска в директории всех файлов и директорий, имена которых заканчиваются на .txt, следует использовать код:
Если вывести переменную $filelist
, то получим:
Если нужен список файлов и директорий, имена которых начинаются на “te”, то код будет выглядеть так:
А вывод имеет вид:
А для получения списка только директорий с именами, содержащих “ma”, используем код:
Последний пример выведет:
Обратите внимание, что в последнем примере использован флаг GLOB_ONLYDIR
в качестве второго параметра функции. Поэтому файл master.dat
исключен из списка. Хотя функция glob()
очень проста в использовании, иногда она недостаточно гибкая. Например, нет флага для получения только файлов (без директорий), которые соответствуют шаблону.
Используем opendir()
, readdir()
, и closedir()
.
Второй подход к получению списка файлов и директорий, который мы обсудим, заключается в использовании функций opendir()
, readdir()
, и closedir()
.
Функция opendir()
открывает директорию и возвращает дескриптор соединения. Как только дескриптор получен, можно использовать функцию readdir()
. С каждым обращением данная функция выдает имя следующего файла или директории внутри открытого каталога. Если все имена уже были перечислены, функция возвращает false. Для закрытия дескриптора используется функция
closedir()
.
В отличие от использования функции glob()
, данный подход сложнее, так как у вас нет параметров, которые помогают фильтровать список возвращаемых имен файлов и директорий. Вы должны выполнить фильтрацию самостоятельно, чтобы получить нужный результат.
Ниже приведенный пример возвращает список имен файлов и директорий начинающихся на “te”:
При выполнении выше приведенного кода, переменная $entry
будет содержать такие включения, как “.” и “..”. Это две виртуальные директории, которые имеются в каждом каталоге файловой системы. Они представляют текущий каталог и родительский каталог соответственно.
Второй пример выводит только файлы, содержащиеся в заданном каталоге.
Пример выдаст следующее:
Использование scandir()
В завершение представим функцию scandir()
. Она имеет только один обязательный параметр: путь для чтения. Функция возвращает массив файлов и директорий, расположенных по указанному пути. Для получения списка файлов и директорий по определенному критерию нужно выполнить дополнительную фильтрацию. С другой стороны, решение получается более кратким и не требует управления дескрипторами.
Данный пример показывает, как получить список файлов и каталогов, имена которых начинаются на “te”:
Воспользуемся итераторами SPL
Теперь рассмотрим использование итераторов SPL. Но прежде, чем приступить к решению нашей задачи, проведем введение в библиотеку SPL и итераторы. Библиотека SPL предоставляет серию классов для объектно ориентированных структур данных, итераторов, дескрипторов файлов и прочее.
Одно из преимуществ итераторов заключается в том, что они являются классами и их можно расширить для удовлетворения собственных нужд. Другой плюс состоит в том, что итераторы имеют собственные методы, которые являются полезными при решении множества типовых задач и располагаются в одном месте. Посмотрите на пример использования FilesystemIterator
в сравнении с readdir()
. Оба метода применяют цикл, но в случае readdir()
вы обрабатываете только строку, а FilesystemIterator
работает с объектом, который может содержать дополнительную информацию о файле или директории (размер, владелец, права доступа и так далее).
Конечно, PHP представляет возможность для получения такой информации с помощью функций,например filesize()
и fileowner().
Но PHP5 основан на использовании концепции ООП. Поэтому лучше использовать современные методы работы с языком программирования. На нашем сайте есть уроки, посвященные работе с итераторами.
Как уже сообщалось во водной части урока, мы рассмотрим использование FilesystemIterator
, RecursiveDirectoryIterator
и GlobIterator
. Первый наследуется от DirectoryIterator
, а остальные от FilesystemIterator
. Они все имеют один и тот же конструктор, который принимает два параметра:
$path
(обязательный): путь к пункту файловой системы, над которым совершаются операции$flags
(опциональный): один или несколько флагов, перечисленных в документации
Реальное различие в данных итераторах заключается в их использовании для навигации по заданному пути.
FilesystemIterator
Использовать FilesystemIterator
очень просто. Рассмотрим в действии. Представляем два примера. Первый показывает поиск всех файлов и каталогов, имена которых начинаются на “te”. Второй пример использует другой итератор RegexIterator
для поиска всех файлов и каталогов, имена которых заканчиваются на “t.dat” или “t.php”. Итератор RegexIterator
используется для фильтрации результата на основе регулярных выражений.
Выше приведенный код выдаст результат, аналогичный предыдущим примерам.
Второй пример с применением RegexIterator
:
Он будет выводить:
RecursiveDirectoryIterator
Итератор RecursiveDirectoryIterator
обеспечивает интерфейс для рекурсивного прохода по директориям файловой системы. Он имеет несколько полезных методов, таких как getChildren()
и hasChildren()
, которые возвращают итератор для текущего места, если это директория, и проверяют, является ли текущая точка входа директорией. Следующий пример демонстрирует использование RecursiveDirectoryIterator
и getChildren()
. Результат будет такой же, как и в предыдущих примерах.
GlobIterator
Итератор GlobIterator
выполняет проход по файловой системе также, как и функция glob()
. Первый параметр может включать шаблон для имени. Пример демонстрирует использование GlobIterator
с тем же результатом, что и ранее.
Заключение
В данном уроке демонстрируется использование различных подходов для достижение одинаковой цели: получение списка файлов и директорий. Следует запомнить следующие ключевые моменты:
- Функция
glob()
является встроенным решением, но она недостаточно гибкая. - Решение на основе
opendir()
,readdir()
, иclosedir()
более сложное и требует дополнительной фильтрации, но оно более гибкое. - Функция
scandir()
требует дополнительной фильтрации, но работает без обработки дескриптора. - Если вы используете подход ООП, то следует применять библиотеку SPL. Дополнительно вы можете расширить классы своим функционалом.
- Итератор
GlobIterator
имеет функцию предварительной фильтрации, а другие используютRegexIterator
.
ruseller.com
Today’s:
- Linux Смена пользователя в консоли (терминал) — Как зайти под пользователем (перелогиниться)
- Деплой — что это в программировании (deploy)
- "Черта над" символом — что означает в математике. Значения
- [!] Паскаль — Онлайн Учебник для начинающих изучать программирование с нуля. Справочник. Примеры кода. [Pascal]
- python Число элементов в списке ("массиве") — длина списка — len — как узнать
- latex Cистема уравнений. Фигурная скобка — пример команд
- telegram Сделать админом в группе (чате) — как дать права
- Нормы содержания ртути в воздухе — Почему опасно количество ртути в градуснике/термометре, сколько нужно для отравления
- Разница между INCLUDE и EXTEND диаграмма вариантов использования (use case)
- #12.1 Цикл Repeat/Until "с постусловием" в Паскаль
- [!] LaTeX СПРАВОЧНИК — Примеры символов, кода, обозначений и команд [латекс, латех]
- latex Матрица и скобки: квадратные, фигурные, круглые скобками, двойной модуль (норма) — определитель латех
- windows server 2003 ключ активации
- Рынок земли. Спрос и предложение земли. Рента и ее формы. Цена земли.
- #13.1 Вложенные циклы в Паскаль. Примеры кода, решения задач — For, While, Repeat/Until
- .bat комментарии — как комментировать код, примеры
- windows Как проверить системные настройки прокси — через командную строку cmd
- #3 Типы данных в языке Pascal. Объявление переменных. Целые числа integer. Оператор присваивания. Инициализация в Паскаль
- Проблемы с установкой SimpleMVC
- Определить тип переменной с++ = typeid c++ = как определить тип переменной в си++ детектируем — определяем string
- #1 Начало программирования. Минимальная программа. Комментарии в коде. Тело программы и операторные скобки. Паскаль
- phpstorm Раскомментировать/Закомментировать код — горячие клавиши -phpstorm comment hotkey
- Преобразовать строку в число. Пример использования процедуры Val() в Паскаль
- latex Больше или равно Меньше или равно — команды, "как выводится" (с прямой и обычной чертой равенства)
- mysql LIMIT OFFSET синтаксис. Примеры sql запросов
- 11. Анализ предметной области: цели и задачи. Модели предметной области. Формальные определения. Классификация моделей. Методоло
- Кнопка MU на калькуляторе — Для чего нужна и как использовать. Описание, примеры
- latex Точка умножение — знак произведения
- Стругацкие список произведений
- Представление кириллицы в UTF-8 — русские символы — таблица
fkn.ktu10.com
Мне нужно было выполнить чтение данного каталога и, опираясь на функцию , я создал эту страницу для чтения каталогов, основанных на JQuery:
<?php /** * Recovers folder structure and files of a certain path * * @param string $path Folder where files are located * @param string $pattern Filter by extension * @param string $flags Flags to be passed to the glob * @return array Folder structure */ function getFolderTree($path) { //Recovers files and directories $paths = glob($path . "*", GLOB_MARK | GLOB_ONLYDIR | GLOB_NOSORT); $files = glob($path . "*"); //Traverses the directories found foreach ($paths as $key => $path) { //Create directory if exists $directory = explode("\", $path); unset($directory[count($directory) - 1]); $directories[end($directory)] = getFolderTree($path); //Verify if exists files foreach ($files as $file) { if (strpos(substr($file, 2), ".") !== false) $directories[] = substr($file, (strrpos($file, "\") + 1)); } } //Return the directories if (isset($directories)) { return $directories; } //Returns the last level of folder else { $files2return = Array(); foreach ($files as $key => $file) $files2return[] = substr($file, (strrpos($file, "\") + 1)); return $files2return; } } /** * Creates the HTML for the tree * * @param array $directory Array containing the folder structure * @return string HTML */ function createTree($directory) { $html = "<ul>"; foreach($directory as $keyDirectory => $eachDirectory) { if(is_array($eachDirectory)) { $html .= "<li class='closed'><span class='folder'>" .
eyDirectory . "</span>"; $html .= createTree($eachDirectory); $html .= "</li>"; } else { $html .= "<li><span class='file'>" . $eachDirectory . "</span></li>"; } } $html .= "</ul>"; return $html; } //Create output $directory = getFolderTree('..videos'); $htmlTree = createTree($directory["videos"]); ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"/> <title>PHP Directories</title> <link rel="stylesheet" href="http://jquery.bassistance.de/treeview/jquery.treeview.css" /> <link rel="stylesheet" href="http://jquery.bassistance.de/treeview/demo/screen.css" /> <script src="http://jquery.bassistance.de/treeview/lib/jquery.js" type="text/javascript"></script> <script src="http://jquery.bassistance.de/treeview/lib/jquery.cookie.js" type="text/javascript"></script> <script src="http://jquery.bassistance.de/treeview/jquery.treeview.js" type="text/javascript"></script> <script type="text/javascript" src="http://jquery.bassistance.de/treeview/demo/demo.js"></script> </head> <body> <div id="main"> <ul id="browser" class="filetree"> <?php echo $htmlTree;?> </ul> </div> </body> </html>
Структура, используемая в дереве с JQuery, была взята с сайта: http://jquery.bassistance.de/treeview/demo/
Надеюсь, это полезно!
code-examples.net
Часто в PHP нужно вывести все файлы и каталоги в виде списка…это нужно, чтобы нам сразу узнать где у нас, чего и сколько…давайте приступать…
Сегодня saitsozdanie.ru рассмотрит несколько способов:
1 способ) Выводим только файлы с расширением php (например)
$filelist = glob("*.php");
foreach ($filelist as $filename){
echo $filename." и его размер: ".filesize($filename)." байт <br>";
}
Также можно вывести файлы любого расширения txt например и тд. Дело в том, что функция glob() — предназначена для вывода по шаблону. (Если поставить так me* — то будут выводиться все файлы начинающиеся на «me»)
2 способ) Выводим все файлы в данной папке:
$path = ".";
$filelist = array();
if($handle = opendir($path)){
while($entry = readdir($handle)){
echo $entry."<br>";
}
closedir($handle);
}
Тут мы используем функции opendir(), для открытия файла…далее можно сразу использовать функцию readdir(), которая шаг за шагом будет считывать по одному файлу и наполнять наш массивчик $filelist, и в конце закрываем открытую папочку с помощью функции closedir(). Если в $path = «.» вместо точки поставить files — то будут считываться все файлы из папки по имени files.
3 способ) Задействуем функцию scandir()
Функция scandir() — принимает лишь путь или место, где нужно искать и получает массив с данными, который перебрав можно получить файлы и папки в алфавитном порядке. scandir(«.») — будет искать в той же категории, что и сам исполняемый файл.
$path = scandir("files");
foreach($path as $k){
echo $k."<br>";
}
4 способ) использование функции с задействованием цикла for
function nav($dir){
if(is_dir($dir)){
$files = scandir($dir);
array_shift($files); // удаляем из массива '.'
array_shift($files); // удаляем из массива '..'
for($i=0; $i<sizeof($files); $i++){
$len = $files[$i];
echo $len."<br>";
}
}
}
$dir = "files";
nav($dir);
5способ) Ну и напоследок самый верный по мнению многих профессионалов способ для чтения каталога на php:
$dir = "files";
if($handle = opendir($dir)){
while(false !== ($file = readdir($handle))) {
if($file != "." && $file != ".."){
echo $file."<br>";
}
}
}
Какой вам проще выбирайте.
saitsozdanie.ru
Итак, загружать файлы на сервер мы уже умеем. Но как вывести список загруженных файлов на экран.
Сегодня мы рассмотрим несколько простых примеров и изучим новые функции php, которые помогут нам работать с файловой системой, а именно считывать ее содержимое.
Первый и самый простой способ — это функция glob(). Она позволяет выводить список всех фалов или по заданному условию. Подробнее читайте ТУТ.
Например, чтобы вывести список всех файлов, нам нужно прописать:
foreach (glob("*.*") as $filename) { echo "$filename размер " . filesize($filename) . "<br>"; }
Боле сложный, но гибкий вариант, это работа функциями:
opendir() — Открывает каталог
readdir() — Получает элемент каталога
closedir() — Закрывает каталог
is_dir() — проверяет, является ли элемент папкой
Вот как это работает:
$dir = 'files//'; if (is_dir($dir)) { if ($dh = opendir($dir)) { while ($file = readdir($dh)) { echo "файл: $file <BR>"; } closedir($dh); } }
Но все то же может выполнять одна единственная функция.
scandir() — Получает список файлов и каталогов, расположенных по указанному пути. Кроме того, ей можно передавать параметр сортировки: 0 — по возрастанию и 1 — по убыванию. Если этот параметр не указать, то по умолчанию будет 0.
$dir = 'files/'; $files = scandir($dir,1 ); foreach ($files as $file){ echo "<li><a href='$dir$file'>$file</a></li> <br>"; }
Вы уже заметили, что появляются непонятные точки перед списком файлов, чтобы их убрать, используем такой вариант:
$dir = 'files/'; //пропускаем точки $skip = array('.', '..'); $files = scandir($dir); foreach($files as $file) { if(!in_array($file, $skip)) echo $file . '<br />'; }
И последним способом на сегодня будет dir — Возвращает экземпляр класса Directory. ООП мы еще не рассматривали, но это не мешает попробовать и этот вариант.
$d = dir("files/"); echo "Дескриптор: " . $d->handle . "<br>"; echo "Путь: " . $d->path . "<br>"; while (false !== ($entry = $d->read())) { echo $entry."<br>"; } $d->close();
Советую ознакомиться:
http://php.net/manual/ru/book.dir.php
http://ruseller.com/lessons.php?id=1575&rub=37
—————————-
http://m-o-n-e-t-a.ru/nikolay_2
slusar.su
Основа
Сортировка по умолчанию — по алфавиту
<?php $dir = '/path/to/directory'; $files = scandir($dir); foreach ($files as $file): echo $file .'<br>'; endforeach; ?>
Обратный порядок сортировки
<?php $dir = '/var/www/proba/www'; $files = scandir($dir,1); foreach ($files as $file): echo $file .'<br>'; endforeach; ?>
Подробнее
<?php $dir = "/tmp/"; // Открыть заведомо существующий каталог и начать считывать его содержимое if (is_dir($dir)) { if ($dh = opendir($dir)) { while (($file = readdir($dh)) !== false) { print "Файл: $file : тип: " . filetype($dir . $file) . "n"; } closedir($dh); } } ?>
<?php $dir = "/some_dir/"; //задаём имя директории if(is_dir($dir)) { //проверяем наличие директории echo $dir.' - директория существует;<br>'; $files = scandir($dir); //сканируем (получаем массив файлов) array_shift($files); // удаляем из массива '.' array_shift($files); // удаляем из массива '..' for($i=0; $i<sizeof($files); $i++) echo '-файл: '.$files[$i].';<br>'; //выводим все файлы } else echo $dir.' -такой директории нет;<br>'; ?>
Сделать выводимые файлы ссылками
<?php $dir = "/some_dir/"; //задаём имя директории if(is_dir($dir)) { //проверяем наличие директории echo $dir.' - директория существует;<br>'; $files = scandir($dir); //сканируем (получаем массив файлов) array_shift($files); // удаляем из массива '.' array_shift($files); // удаляем из массива '..' for($i=0; $i<sizeof($files); $i++) echo '-файл: <a href="'.$dir.$files[$i].'" title="открыть/скачать файл или страницу">'.$files[$i].'</a>;<br>'; //выводим все файлы } else echo $dir.' -такой директории нет;<br>'; ?>
Как удалить из списка выводимых файлов Thumbs.db
заменить одну строчку следующим образом:
меняем
for($i=0; $i<sizeof($files); $i++) echo '-файл: '.$files[$i].';<br>'; //выводим все файлы
на
for($i=0; $i<sizeof($files); $i++) if($files[$i]!='Thumbs.db') echo '-файл: '.$files[$i].';<br>'; //выводим все файлы, кроме Thumbs.db
Функция получения случайного названия файла из директории
## Функция получения случайного названия файла из дриктории ## function randomFileName($dir_FileName) { // сканируем дирикторию и добавляем название файлов в массив $array_FileName = scandir($dir_FileName); // удаляем мусорные значение одной точки из массива $key = array_search('.', $array_FileName); if ($key !== false) { unset($array_FileName[$key]); } // удаляем мусорные значение двух точек из массива $key = array_search('..', $array_FileName); if ($key !== false) { unset($array_FileName[$key]); } // перемешиваем массив функцией shuffle shuffle($array_FileName); // выводи данные из функции return $array_FileName[0]; } $dir_message = 'myDir'; echo randomFileName ($dir_message);
zakaz-saita.com
Here is my recursive function, placing directories into new array keys and its contents within.
/* find_files( string, &array )
** Recursive function to return a multidimensional array of folders and files
** that are contained within the directory given
*/
function find_files($dir, &$dir_array)
{
// Create array of current directory
$files = scandir($dir);
if(is_array($files))
{
foreach($files as $val)
{
// Skip home and previous listings
if($val == '.' || $val == '..')
continue;
// If directory then dive deeper, else add file to directory key
if(is_dir($dir.'/'.$val))
{
// Add value to current array, dir or file
$dir_array[$dir][] = $val;
find_files($dir.'/'.$val, $dir_array);
}
else
{
$dir_array[$dir][] = $val;
}
}
}
ksort($dir_array);
}
// Example
$folder_list = array();
find_files('/path', $folder_list)
var_dump($folder_list);
array(3) {
["directory_01"]=>
array(4) {
[0]=>
string(12) "directory_02"
[1]=>
string(12) "directory_03"
[2]=>
string(11) "file_01.txt"
[3]=>
string(11) "file_02.txt"
}
["directory_01/directory_02"]=>
array(2) {
[0]=>
string(11) "file_03.txt"
[1]=>
string(11) "file_04.txt"
}
["directory_01/directory_03"]=>
array(2) {
[0]=>
string(11) "file_05.txt"
[1]=>
string(11) "file_06.txt"
}
}
php.net
Приветствую! Сегодня я хотел бы поделится решением проблемы поиска файлов с которой мне пришлось столкнутся по работе.
Описание проблемы.
Передо мной стояла задача получить список файлов(путей) в какой то определенной директории. Результат должен иметь вид массива который я смог бы в дальнейшем перебрать.
Случай был не самый простой и я приступил к реализации решения.
Решение.
Далее я распишу ход процесса и буду снабжать участки кода комментариями.
Начинаем мы с того что получим путь до нужной нам директории. Методы получения пути до нее у вас могут отличаться.
$dirPath = $_SERVER['DOCUMENT_ROOT'].'/uploads/needle_dir';
Путь по которому будем искать файлы у нас есть, теперь приступим к написанию функции для поиска по этому пути.
Для начала мы создадим массив в который будут помещаться наши пути до файлов. Этот массив будет динамически наполняться нашей функцией в процессе обхода директории.
Для этого нам необходимо передать в функцию сам путь и созданный ранее массив. Для того чтобы все складывалось в ранее созданный массив необходимо указать ссылку на него в параметрах функции.
Вот как это выглядит:
function findFilesFromDirectory($path, &$files) { } $dirPath = $_SERVER['DOCUMENT_ROOT'].'/uploads/needle_dir'; $files = []; findFilesFromDirectory($dirPath, $files);
Итак. Каркас функции у нас есть, приступим к её наполнению.
Для начала нам нужно проверять имеющийся у нас путь на то является он директорией или файлом.
function findFilesFromDirectory($path, &$files) { if (is_dir($path)) { //если переданный путь является директорией то мы продолжаем проверку } else if (is_file($path)) { //если же это файл то возвращаем путь до него. return $path; } }
Предположим что наш путь является папкой, далее на нужно разбить этот путь на входящие в него файлы и папки.
В этом нам может помочь отличная php функция scandir ($path). Она анализирует переданный путь и возвращает массив содержащий в себе названия папой и файлов находящихся по переданному пути.
Так же эта функция возвращает в массиве 2 значения в виде одинарной точки и двойной, они присутствуют во всех директориях, и использованы для того чтобы сослаться к самой директории и своему сразу родителю.
В нашем случае они не нужны и мы удаляем их из результата работы scandir ($path).
function findFilesFromDirectory($path, &$files) { if (is_dir($path)) { $cleanPath = array_diff(scandir($path), array('.', '..')); } else if (is_file($path)) { return $path; } }
Теперь у нас есть массив содержащий данные вида: [‘files’ , ‘file.js’ , ‘index.html’]. Нас это устраивает и мы можем переходить к этапу перебора этого массива.
function findFilesFromDirectory($path, &$files) { if (is_dir($path)) { $cleanPath = array_diff(scandir($path), array('.', '..')); foreach ($cleanPath as $file) { /* Соединяем $file с изначальным путем чтобы получить строку вида: * urltodir/files/morefiles */ $finalPath = $path. '/' . $file; } } else if (is_file($path)) { return $path; } }
Теперь у нас есть новый путь до папки в которой мы ищем файлы и нам остается только повторить поиск по новому пути и сохранять результат в массив ссылку на который мы передаем в параметры функции.
function findFilesFromDirectory($path, &$files) { if (is_dir($path)) { $cleanPath = array_diff(scandir($path), array('.', '..')); foreach ($cleanPath as $file) { $finalPath = $path. '/' . $file; //Тут мы рекурсивно вызываем нашу функцию и передаем ей свежий путь до папки $result = $this->findFilesFromDirectory($finalPath, $files); /* Проверяем на то не вернул ли результат null, * если нет то создаем новый элемент массива с путем до файла. */ if (!is_null($result)) $files[] = $result; } } else if (is_file($path)) { return $path; } }
Теперь после каждого обхода функции будет создаваться новый путь до папки пока функция не переберёт весь каталог и входящие в него папки. После выполнения работы данной функции мы можем перебрать получившийся массив $files и получить нужные нам пути до файлов.
В конечно итоге наша конструкция будет выглядеть так:
function findFilesFromDirectory($path, &$files) { if (is_dir($path)) { $cleanPath = array_diff(scandir($path), array('.', '..')); foreach ($cleanPath as $file) { $finalPath = $path . '/' . $file; $result = $this->findFilesFromDirectory($finalPath, $files); if (!is_null($result)) $files[] = $result; } } else if (is_file($path)) { return $path; } } $dirPath = $_SERVER['DOCUMENT_ROOT'].'/uploads/needle_dir'; $files = []; $this->findFilesFromDirectory($dirPath, $files); foreach ($files as $file){ echo $file; // urltodir/files/somedirectory/file.js }
На этом пожалуй все. Надеюсь мой опыт будет вам полезен. Успехов!
dmkweb.ru Права на контент защищены.
dmkweb.ru