Php удалить все файлы в папке
Например, у меня была папка под названием "Temp", и я хотел удалить или удалить все файлы из этой папки с помощью PHP. Могу ли я это сделать?
Хорошо, что на этот вопрос ответили ниже, прежде чем он был отмечен как дубликат. Ответы ниже намного лучше, чем связанный ответ на вопрос. Плюс вопрос другой, этот вопрос просит очистить каталог, а не удалить. Да, это другой вопрос, который вызвал разные ответы. Он не должен быть отмечен как дубликат.Если вы хотите удалить скрытые файлы, такие как .htaccess, вы должны использовать
Также есть DirectoryIterator или DirectoryRecursiveIterator. Это также работает для относительных путей? Допустим, полный путь - «/ var / www / html / folder_and_files_to_delete /», а скрипт удаления помещен в «/var/www/html/delete_folders_and_files.php». Могу ли я просто взять "folder_and_files_to_delete" в качестве пути? @yoano да, конечно, если относительный путь правильный. Можно ли использовать glob, если в каталоге находятся десятки тысяч или сотни тысяч файлов?Если вы хотите удалить все из папки (включая подпапки), используйте эту комбинацию array_map , unlink и glob :
Обновить
Этот вызов также может обрабатывать пустые каталоги - спасибо за подсказку, @mojuba!
Лучший ответ, спасибо. Чтобы избежать уведомлений, я бы также сделал glob(". ") ?: [] (PHP 5.4+), потому что для пустой директории glob() возвращает false . Он удаляет все файлы в текущей папке, но возвращает предупреждение для подпапок и не удаляет их. @Ewout: даже если мы объединим ответ Стихозы и Муджубы, так как ваш запрос возвращает одно и то же предупреждение для подпапок, но не удаляет ихВот более современный подход, используя Стандартную библиотеку PHP (SPL).
Это лучший ответ IMHO, так как это действительно быстро и использует ОО подход. Это прекрасно работает, когда у вас нет SSH-доступа, а FTP рекурсивно удаляет множество файлов и папок буквально часами . с этими строками я удалил 35000 файлов менее чем за 3 секунды! Разве «DirectoryIterator» также перебирает подкаталоги? Если это так, «unlink» будет генерировать предупреждение в таких случаях. Разве тело цикла не должно больше походить на ответ Yamiko и проверять каждую запись, если это файл, перед вызовом «unlink»?Предполагая, что у вас есть папка с большим количеством файлов, читающих их все, а затем удаление в два этапа не выполняется. Я считаю, что наиболее эффективным способом удаления файлов является просто использование системной команды.
Например, в linux я использую:
Или это, если вы хотите рекурсивное удаление без необходимости писать рекурсивную функцию
те же самые точные команды существуют для любой ОС, поддерживаемой PHP. Имейте в виду, что это способ удаления файлов. $absolutePathToFolder ДОЛЖЕН быть проверен и защищен перед запуском этого кода, и разрешения должны быть предоставлены.
пожалуйста, дайте мне решение для перечисления всех папок,подпапок,файлов в каталоге с помощью PHP. Моя структура папок выглядит так:
Я хочу получить список всех файлов внутри каждой папки.
есть ли команда сценария оболочки в php?
в этом коде перечислены все каталоги и файлы в отсортированном порядке в виде дерева. Это генератор карт сайта с гиперссылками на все ресурсы сайта. Полный источник веб-страницы здесь. Вам нужно будет изменить путь на девятой линии от конца.
В случае, если вы хотите использовать directoryIterator
следующая функция является повторной реализацией ответа @Shef с directoryIterator
очень простой способ показать структуру папок использует RecursiveTreeIterator class (PHP 5 >= 5.3.0, PHP 7) и генерирует графическое дерево ASCII.
существует также некоторый контроль над представлением ASCII дерева путем изменения префиксов с помощью RecursiveTreeIterator::setPrefixPart , например $it->setPrefixPart(RecursiveTreeIterator::PREFIX_LEFT, "|");
Я очень люблю библиотеку SPL, они предлагают итераторы, в том числе recursivedirectoryiterator упакован.
он будет использовать, чтобы сделать строку меню в формате каталога
Если вы ищете рекурсивный каталог листинга решений и расположить их в многомерном массиве. Используйте ниже код:
вот простая функция с scandir & array_filter это делает работу. фильтр необходимые файлы с помощью регулярных выражений. Я удалил . .. и скрытые файлы, такие как .htaccess , вы также можете настроить выводить с помощью <ul> и цвета, а также настроить ошибки в случае отсутствия сканирования или пустых dirs!.
вы также можете попробовать это:
поздно на шоу, но строить из принято отвечать.
если вы хотите иметь все файлы и каталоги в виде массива (это может быть красиво красиво с в формате JSON.преобразовать в строки в JavaScript), вы можете изменить функцию, чтобы:
для новичков.
использовать вышеупомянутый JSON.stringify , ваш JS/jQuery будет чем-то вроде:
^ это предполагает у вас есть <pre> элемент в вашем HTML где-то. Любой вкус AJAX будет делать, но я полагаю, что большинство людей используют что-то похожее на jQuery выше.
и сопровождающий PHP:
где у вас уже есть listFolderFiles раньше.
в моем случае, я установил мой $rootPath в корневой каталог сайта.
конечный результат что-то вроде.
Примечание: ваш не будет выглядеть точно так же - я изменил JSON.stringify чтобы отобразить вкладки (вертикальные трубы), выровнять все значения клавиш, удалить кавычки с клавиш и несколько других вещей. Я изменю этот ответ со ссылкой, Если я когда-либо смогу загрузить его или получить достаточный интерес.
Я искал аналогичную функцию для этого. Мне нужны были каталоги как ключи и подкаталоги как массивы и файлы, которые просто помещаются в качестве значений.
Я использовал следующий код:
есть много, чтобы принять.
первая функция get_files_in_dir функция была создана так, чтобы я мог получить все файлы и папки в каталоге на основе регулярного выражения. Я использую его здесь, потому что он имеет некоторую проверку ошибок, чтобы убедиться, что каталог преобразован в матрица.
Далее, у нас есть простая функция, которая просто добавляет косую черту в конце строки, если его нет уже.
наконец, у нас есть get_directory_tree функция, которая будет перебирать все папки и вложенные папки и создавать ассоциативный массив, где имена папок являются ключами, а файлы-значениями (если папка не имеет вложенных папок).
В PHP файлы из папки могут быть удалены с использованием различных подходов и встроенных методов, таких как unlink, DirectoryIterator и DirectoryRecursiveIterator.
Некоторые из этих подходов объясняются ниже:
Подход 1:
- Создать список файлов с помощью метода glob ()
- Перебирайте список файлов.
- Проверьте правильность имени файлов.
- Удалите файл, используя метод unlink () .
Пример:
<?php
// PHP программа для удаления всех
// файл из папки
// Путь к папке, который нужно очистить
// Список имен файлов внутри
// указанная папка
$files = glob ( $folder_path . '/*' );
// Удаление всех файлов в списке
foreach ( $files as $file )
if ( is_file ( $file ))
// Удалить данный файл
Выход:
Перед запуском кода:
После запуска кода:
Примечание. Скрытые файлы можно включить в операцию удаления файла, добавив следующий код:
$hidden_files = glob ( $folder_path . '/*' , GLOB_BRACE);
Подход 2:
- Создайте список файлов, используя метод glob () .
- Отфильтруйте список, используя методы array_filter () или array_merge () .
- Сопоставьте список с методом unlink (), используя метод array_map () .
Пример:
<?php
// PHP программа для удаления всех файлов из папки
// Удаление всех файлов внутри данной папки
array_map ( 'unlink' , array_filter (
( array ) array_merge ( glob ( "myGeeks/*" ))));
Подход 3:
- Создать список файлов с помощью DirectoryIterator.
- Перебирайте список файлов.
- Проверьте файл, проверяя, есть ли в каталоге файлов точка или нет.
- Используя ссылку на метод getPathName, удалите файл с помощью метода unlink () .
Пример:
<?php
// PHP программа для удаления всех файлов
// из папки
// Путь к папке, который нужно очистить
// Назначение файлов внутри каталога
$dir = new DirectoryIterator(dirname( $folder_path ));
// Удаление всех файлов в списке
foreach ( $dir as $fileinfo )
if (! $fileinfo ->isDot())
// Удалить данный файл
unlink( $fileinfo ->getPathname());
Подход 4:
- Создать список всех иерархий каталогов внутри данного каталога папок с помощью RecursiveDirectoryIterator
- FileystemIterator :: SKIP_DOTS используется для игнорирования точек при создании списка файлов.
- RecursiveIteratorIterator :: CHILD_FIRST используется для выбора файлов, присутствующих в корневом каталоге.
- Перебирайте список файлов и удаляйте папки и файлы в соответствии со спецификацией.
Пример:
<?php
// PHP программа для удаления всех FilesystemIterator
// из папки
// Путь к папке, который нужно очистить
// Назначение файлов внутри каталога
$dir = new RecursiveDirectoryIterator(
// Уменьшаем поиск файлов до заданного корня
// только каталог
В PHP-скрипте обработка загруженных через форму происходит через глобальный массив $_FILES , рассмотрим его содержимое:
Загрузка одного файла
Чтобы форма отправила файл, необходимо использовать только метод POST для отправки данных и добавить к тегу <form> атрибут enctype="multipart/form-data" , который определяет способ кодирования данных формы при их отправке на сервер.
Код скрипта index.php:
Результат:
Описание значений массива $_FILES :
Загрузка несколько файлов
Для загрузки сразу нескольких файлов к <input type="file"> нужно добавить атрибут multiple , а к имени поля – [] .
Код скрипта index.php
Результат:
Как видно, структура массива разделена по свойствам, а не по файлам. Для удобства работы с циклом foreach массив $_FILES можно преобразовать:
Результат:
Максимальный размер загружаемого файла
Размер загружаемого файла можно ограничить, добавив в форму скрытое поле с максимальным размером файла <input type="hidden" name="MAX_FILE_SIZE" value="2097152"> :
Коды ошибок загрузки файлов
Код | Константа | Описание |
---|---|---|
0 | UPLOAD_ERR_OK | Ошибок не возникло, файл успешно загружен на сервер. |
1 | UPLOAD_ERR_INI_SIZE | Размер файла превысил максимально допустимый размер, который задан директивой upload_max_filesize |
2 | UPLOAD_ERR_FORM_SIZE | Размер загружаемого файла превысил значение MAX_FILE_SIZE, указанное в HTML-форме. |
3 | UPLOAD_ERR_PARTIAL | Загружаемый файл был получен только частично. |
4 | UPLOAD_ERR_NO_FILE | Файл не был загружен. |
6 | UPLOAD_ERR_NO_TMP_DIR | Отсутствует временная папка. |
7 | UPLOAD_ERR_CANT_WRITE | Не удалось записать файл на диск (возникает, когда на хостинге закончилось место). |
8 | UPLOAD_ERR_EXTENSION | PHP-расширение остановило загрузку файла. |
Настройки PHP
Обычно настройки загрузки файлов на хостинге вполне нормальные и не вызывают проблем, но есть исключения. Если не загружаются большие файлы, то скорее всего установлен лимит на размер загружаемого файла, ограничено время загрузки файла или ограничено количество одновременных загрузок.
Посмотреть установленные значения можно с помощью функции phpinfo() , в разделе «Core».
Читайте также: