Выбрать все файлы папки php

scandir

Возвращает array , содержащий имена файлов и каталогов, расположенных по пути, переданном в параметре directory .

Список параметров

По умолчанию, сортировка производится в алфавитном порядке по возрастанию. Если необязательный параметр sorting_order установлен в значение SCANDIR_SORT_DESCENDING , сортировка производится в алфавитном порядке по убыванию. Если же он установлен в значение SCANDIR_SORT_NONE , то сортировка не производится.

За описанием параметра context обратитесь к разделу «Потоки» данного руководства.

Возвращаемые значения

Возвращает array имен файлов в случае успеха или FALSE в случае ошибки. Если directory не является каталогом, возвращается FALSE и генерируется сообщение об ошибке уровня E_WARNING .

Список изменений

Версия Описание
5.4.0 Были добавлены sorting_order константы. Любое ненулевое значение задавало сортировку по убыванию в предыдущих версиях. Поэтому для всех версий PHP нужно использовать 0 для сортировки по возрастанию и 1 для сортировки по убыванию. Опции для режима SCANDIR_SORT_NONE не существовало до PHP 5.4.0.

Примеры

Пример #1 Простой пример использования функции scandir()

$dir = ‘/tmp’ ;
$files1 = scandir ( $dir );
$files2 = scandir ( $dir , 1 );

print_r ( $files1 );
print_r ( $files2 );
?>

Результатом выполнения данного примера будет что-то подобное:

Array ( [0] => . [1] => .. [2] => bar.php [3] => foo.txt [4] => somedir ) Array ( [0] => somedir [1] => foo.txt [2] => bar.php [3] => .. [4] => . )

Пример #2 Альтернативный вариант функции scandir() для PHP 4

$dir = «/tmp» ;
$dh = opendir ( $dir );
while ( false !== ( $filename = readdir ( $dh ))) $files [] = $filename ;
>

Результатом выполнения данного примера будет что-то подобное:

Array ( [0] => . [1] => .. [2] => bar.php [3] => foo.txt [4] => somedir ) Array ( [0] => somedir [1] => foo.txt [2] => bar.php [3] => .. [4] => . )

Примечания

Для этой функции вы можете использовать URL в качестве имени файла, если была включена опция fopen wrappers. Смотрите более подробную информацию об определении имени файла в описании функции fopen() . Смотрите также список поддерживаемых оберток URL, их возможности, замечания по использованию и список предопределенных констант в Поддерживаемые протоколы и обработчики (wrappers).

Смотрите также

  • opendir() — Открывает дескриптор каталога
  • readdir() — Получает элемент каталога по его дескриптору
  • glob() — Находит файловые пути, совпадающие с шаблоном
  • is_dir() — Определяет, является ли имя файла директорией
  • sort() — Сортирует массив
Читайте также:  Java math random или random

Источник

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

В данном уроке мы разберемся с типовой задачей, которая возникает во время работы над проектом PHP: получение списка файлов и директорий. Обсудим несколько базовых и более изощренных подходов, с перечисление плюсов и минусов каждого. Первые три решения будут использовать типовые функции PHP, а затем представим более надежное с применением итераторов SPL.

Для предметного обсуждения решения и демонстраций предположим, что структура директорий имеет следующий вид:

\---manager | \---user | \---document.txt | \---data.dat | \---style.css |---article.txt |---master.dat |---script.php |---test.dat |---text.txt

Базовые решения

Первый набор решений основан на использовании функции glob() , комбинации функций opendir() , readdir() и closedir() , и также функции scandir() .

Использование glob()

Первое решение базируется на использовании функции glob(), которая позволяет выполнять поиск пути с помощью шаблонов. Функция имеет два параметра:

  • $pattern (обязательный): шаблон поиска
  • $flags (опциональный): один или несколько флагов, описание которых можно найти в документации

Рассмотрим примеры. Для поиска в директории всех файлов и директорий, имена которых заканчиваются на .txt, следует использовать код:

Если вывести переменную $filelist , то получим:

array ( 0 => 'article.txt', 1 => 'text.txt' )

Если нужен список файлов и директорий, имена которых начинаются на “te”, то код будет выглядеть так:

array ( 0 => 'test.dat', 1 => 'text.txt' )

А для получения списка только директорий с именами, содержащих “ma”, используем код:

Обратите внимание, что в последнем примере использован флаг GLOB_ONLYDIR в качестве второго параметра функции. Поэтому файл master.dat исключен из списка. Хотя функция glob() очень проста в использовании, иногда она недостаточно гибкая. Например, нет флага для получения только файлов (без директорий), которые соответствуют шаблону.

Используем opendir() , readdir() , и closedir() .

Второй подход к получению списка файлов и директорий, который мы обсудим, заключается в использовании функций opendir() , readdir() , и closedir() .

Функция opendir() открывает директорию и возвращает дескриптор соединения. Как только дескриптор получен, можно использовать функцию readdir() . С каждым обращением данная функция выдает имя следующего файла или директории внутри открытого каталога. Если все имена уже были перечислены, функция возвращает false. Для закрытия дескриптора используется функция closedir() .

В отличие от использования функции glob() , данный подход сложнее, так как у вас нет параметров, которые помогают фильтровать список возвращаемых имен файлов и директорий. Вы должны выполнить фильтрацию самостоятельно, чтобы получить нужный результат.

Ниже приведенный пример возвращает список имен файлов и директорий начинающихся на “te”:

При выполнении выше приведенного кода, переменная $entry будет содержать такие включения, как “.” и “..”. Это две виртуальные директории, которые имеются в каждом каталоге файловой системы. Они представляют текущий каталог и родительский каталог соответственно.

Второй пример выводит только файлы, содержащиеся в заданном каталоге.

array ( 0 => 'article.txt', 1 => 'master.dat', 2 => 'script.php', 3 => 'test.dat', 4 => 'text.txt' )

Использование scandir()

В завершение представим функцию scandir() . Она имеет только один обязательный параметр: путь для чтения. Функция возвращает массив файлов и директорий, расположенных по указанному пути. Для получения списка файлов и директорий по определенному критерию нужно выполнить дополнительную фильтрацию. С другой стороны, решение получается более кратким и не требует управления дескрипторами.

Читайте также:  What is append function in python

Данный пример показывает, как получить список файлов и каталогов, имена которых начинаются на “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 используется для фильтрации результата на основе регулярных выражений.

getFilename(), "te") === 0) < $filelist[] = $entry->getFilename(); > >

Выше приведенный код выдаст результат, аналогичный предыдущим примерам.

Второй пример с применением RegexIterator :

Источник

Работа с директориями в PHP

Набор PHP функций для работы с директориями, получение списка файлов в папке, копирование и удаление содержимого папок.

Создать директорию

$dir = $_SERVER['DOCUMENT_ROOT'] . '/new_folder'; if (!is_dir($dir))

Получить список файлов директории в виде массива

То же самое делает функция scandir() , разница в том что у нее в массиве будут « . », « .. » и есть возможность сортировки.

function list_files($path) < if ($path[mb_strlen($path) - 1] != '/') < $path .= '/'; >$files = array(); $dh = opendir($path); while (false !== ($file = readdir($dh))) < if ($file != '.' && $file != '..' && !is_dir($path.$file) && $file[0] != '.') < $files[] = $file; >> closedir($dh); return $files; > print_r(list_files(__DIR__));

Результат:

Array ( [0] => favicon.ico [1] => index.php [2] => image.jpg [3] => robots.txt )

Удаление директории

Функция rmdir($dir) — удаляет заданную директорию только при условии, если она пуста.

$dir = $_SERVER['DOCUMENT_ROOT'] . '/new_folder'; rmdir($dir);

Удалить директорию со всем содержимым

function remove_dir($dir) < if ($objs = glob($dir . '/*')) < foreach($objs as $obj) < is_dir($obj) ? remove_dir($obj) : unlink($obj); >> rmdir($dir); > $dir = $_SERVER['DOCUMENT_ROOT'] . '/new_folder'; remove_dir($dir);

Удалить только содержимое директории

function clear_dir($dir, $rmdir = false) < if ($objs = glob($dir . '/*')) < foreach($objs as $obj) < is_dir($obj) ? clear_dir($obj, true) : unlink($obj); >> if ($rmdir) < rmdir($dir); >> $dir = $_SERVER['DOCUMENT_ROOT'] . '/new_folder'; clear_dir($dir);

Удалить файлы из директории, кроме некоторых

Например, нужно удалить все файлы, кроме файла .htaccess:

$dir = __DIR__ . '/cache'; $leave = array('index.html', '.htaccess'); foreach (glob($dir . '/*') as $file)

Копирование директории с ее содержимым

function copy_dir($src, $drc) < $dir = opendir($src); if (!is_dir($drc)) < mkdir($drc, 0777, true); >while (false !== ($file = readdir($dir))) < if ($file != '.' && $file != '..') < if (is_dir($src . '/' . $file)) < copy_dir($src . '/' . $file, $drc . '/' . $file); >else < copy($src . '/' . $file, $drc . '/' . $file); >> > closedir($dir); >

Комментарии 2

// Очистка директории
function dir_clear ($dir, $blacklist = []) function dir_clear_run($dir, $blacklist, $super_dir) $objs = glob($dir . '/*');
if (!$objs)
return;
foreach ($objs as $obj) // Проверка на наличие файла в чёрном списке
if (in_array(str_replace("$super_dir/", '', $obj), $blacklist))
continue;
// Удаление объекта
if (is_dir($obj)) dir_clear_run($obj, $blacklist, $super_dir);
rmdir($obj);
> else
unlink($obj);
>
>
dir_clear_run($dir, $blacklist, $dir);
>
// Создание каталога $drc и помещение в него копии содержимого каталога $src
function dir_copy($src, $drc, $blacklist = []) function dir_copy_run($src, $drc, $blacklist, $super_dir) $dir = opendir($src);
if (!is_dir($drc))
mkdir($drc, 0777, true);
while (true) $file = readdir($dir);
if ($file === false)
break;
if ($file == '.' || $file == '..')
continue;
// Проверка на наличие файла в чёрном списке
if (in_array(str_replace("$super_dir/", '', "$src/$file"), $blacklist))
continue;
if (is_dir("$src/$file"))
dir_copy_run("$src/$file", "$drc/$file", $blacklist, $super_dir);
else
copy("$src/$file", "$drc/$file");
>
closedir($dir);
>
dir_copy_run($src, $drc, $blacklist, $src);
>
$online = '/home/a/admin/apolshop.online/public_html';
$ru = '/home/a/admin/apolshop.ru/public_html';
// Проверка происходит относительно переданной директории в первом аргументе
// Значит можно указывать подпапки, например: 'products/resources/imgs'
$blacklist = [
'.htaccess',
'cgi-bin',
'imgs',
'service',
'test',
'staticValues.php'
];
dir_clear($ru, $blacklist); // Очистка .ru
dir_copy($online, $ru, $blacklist); // Копирование из .online в .ru
$fileList = array_diff( scandir( $dir ), array( '..', '.' ) );

Источник

Оцените статью