- Список файлов в папке (PHP)
- Список файлов и директорий
- Улучшаем scandir
- myscandir
- Примечание
- Категории
- Читайте также
- Комментарии
- Вход на сайт
- Социальные сети
- scandir
- Список параметров
- Возвращаемые значения
- Список изменений
- Примеры
- Примечания
- Смотрите также
- Работа с директориями в PHP
- Создать директорию
- Получить список файлов директории в виде массива
- Результат:
- Удаление директории
- Удалить директорию со всем содержимым
- Удалить только содержимое директории
- Удалить файлы из директории, кроме некоторых
- Копирование директории с ее содержимым
- Комментарии 2
Список файлов в папке (PHP)
В PHP пятой версии есть отличная функция scandir, которая возвращает массив файлов и директорий в определенной директории. В качестве параметра принимает имя директории.
Список файлов и директорий
scandir принимает 2 параметра: string directory — имя директории (обязательный), integer sorting_order — необязательный параметр сортировки (два возможных значения: 0 — в алфавитном порядке по возрастанию; 1 — по убыванию).
Улучшаем scandir
Напишем свою функцию myscandir , которая идентична scandir за исключением того, что удаляются . и .. , которые, как мне кажется, редко используются.
myscandir
Примечание
Для работы этой функции нужна 5ятая версия PHP.
Категории
Читайте также
- Как очистить папку (PHP)
- Как проверить права доступа (PHP)
- Массив в JSON (PHP)
- Как скопировать файл (PHP)
- Как дописать в конец файла (PHP)
- Дата изменения файла (PHP)
- Как создать файл (PHP)
- Как очистить файл не удаляя его (PHP)
- Singleton Trait (PHP)
- Редирект (PHP)
- Склонение числительных на PHP
- Как проверить есть ли событие (jQuery)
Комментарии
мне казалось легче использовать array_pop(): или array_shift(); — в зависимости от расположения точек
Вход на сайт
Введите данные указанные при регистрации:
Социальные сети
Вы можете быстро войти через социальные сети:
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 );
?php
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 ;
>
?php
Результатом выполнения данного примера будет что-то подобное:
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() — Сортирует массив
Работа с директориями в 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( '..', '.' ) );