Php список файлов в директории


В данном уроке мы разберемся с типовой задачей, которая возникает во время работы над проектом 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


You May Also Like

About the Author: admind

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.