Php удалить все файлы в папке

Обновлено: 21.11.2024

Добро пожаловать в учебник по удалению файлов в PHP. Нужно удалить некоторые старые, резервные или временные файлы в PHP?

  • Чтобы удалить файл в PHP, используйте unlink("TARGET FILE");
  • Чтобы удалить пустую папку, используйте rmdir("FOLDER");

Это охватывает супербыстрые основы, но «расширенное удаление» целых папок и только определенных типов файлов — это совсем другая история. Как мы это делаем? Читайте дальше, чтобы увидеть больше примеров!

ⓘ Я включил zip-файл со всем исходным кодом примера в начале этого руководства, поэтому вам не нужно копировать и вставлять все… Или если вы просто хотите сразу погрузиться.

БЫСТРЫЕ СЛАЙДЫ

СОДЕРЖАНИЕ

СКАЧАТЬ И ПРИМЕЧАНИЯ

Во-первых, вот ссылка для загрузки примера кода, как и было обещано.

БЫСТРЫЕ ЗАМЕЧАНИЯ

Если вы заметили ошибку, не стесняйтесь комментировать ниже. Я тоже стараюсь отвечать на короткие вопросы, но это один человек против всего мира... Если вам срочно нужны ответы, посмотрите мой список веб-сайтов, чтобы получить помощь по программированию.

СКАЧАТЬ ПРИМЕР КОДА

Нажмите здесь, чтобы загрузить исходный код. Я выпустил его под лицензией MIT, так что не стесняйтесь строить на его основе или использовать в своем собственном проекте.

СПОСОБЫ УДАЛИТЬ ФАЙЛЫ В PHP

Хорошо, теперь давайте перейдем к примерам удаления файлов в PHP.

1) ПРОСТОЕ УДАЛЕНИЕ

Как и во введении выше, мы используем unlink() для удаления файлов и rmdir() для удаления каталогов. Обратите внимание, что обе функции на самом деле возвращают значение true/false, чтобы указать, успешно ли прошел процесс; Файлы, защищенные от копирования, не могут быть удалены, а папки, которые не являются пустыми, не могут быть удалены.

2) УДАЛИТЬ, ЕСЛИ ФАЙЛ СУЩЕСТВУЕТ

PHP выдает надоедливые предупреждения при удалении несуществующих файлов. Итак, вот «быстрое решение» — просто выполните проверку file_exists(), прежде чем приступить к удалению.

3) УДАЛИТЬ ТОЛЬКО ОПРЕДЕЛЕННЫЕ ТИПЫ ФАЙЛОВ

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

4) УДАЛИТЬ ФАЙЛЫ, ТОЛЬКО ЕСЛИ СТАРШЕ УСТАНОВЛЕННОЙ ДАТЫ

Хотите удалить некоторые старые резервные копии или устаревшие файлы? Это почти та же история с использованием старого доброго glob() для получения списка файлов в папке. Затем используйте filemtime() для проверки времени «последнего изменения файла». Удалите файл, если он старше установленной даты.

5) УДАЛИТЬ ПАПКУ ВСЮ

Одна из самых запутанных, так как мы не можем просто использовать rmdir(), чтобы удалить всю папку напрямую. Не буду объяснять это построчно, но, по сути, delFolder() — это рекурсивная функция, которая копается в заданной папке и удаляет все, что внутри.

6) УДАЛЕНИЕ КОМАНДНОЙ СТРОКИ

Наконец, это не совсем «удаление в PHP»… Но мы действительно можем запускать команды оболочки в PHP для удаления файлов и папок.

ПОЛЕЗНЫЕ ИНФОРМАЦИИ И ССЫЛКИ

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

РЕЗЮМЕ

БОЛЬШЕ ССЫЛОК

ИНФОГРАФИЧЕСКАЯ Шпаргалка

КОНЕЦ

Спасибо, что прочитали, и мы подошли к концу этого руководства. Я надеюсь, что это помогло вам с вашим проектом, и если вы хотите поделиться чем-либо с этим руководством, пожалуйста, не стесняйтесь комментировать ниже. Удачи и удачного кодирования!

Оставить комментарий Отменить ответ

Поиск

сообщить об этом объявлении

Прорыв в Javascript

Сфотографировать с помощью веб-камеры? Голосовые команды? Видеозвонки? Да, это возможно с помощью Javascript — ознакомьтесь с прорывом Javascript!

сообщить об этом объявлении

Привет! Сегодня давайте посмотрим, как удалить все файлы и подпапки из папки с помощью php. Если ваш веб-сайт позволяет пользователям загружать содержимое, держу пари, вы, возможно, захотите регулярно выполнять очистку, чтобы освободить больше места на веб-сервере. Например, удаление всех файлов пользователя без активности в течение длительного времени, удаление файлов старше 3 месяцев и т. д. Какой бы ни была причина, выполнять такую ​​очистку вручную — утомительное занятие. Вы можете сделать это с помощью автоматизированного php-скрипта. И я собираюсь показать вам, как именно удалить каталог, все файлы и подкаталоги из него с помощью php.

Удалить все файлы из папки в PHP:

Что касается удаления всех файлов из папки, процесс довольно прост. Для этого вам нужны только две собственные функции php glob() и unlink().

  • Функция glob() возвращает массив имен файлов/каталогов, соответствующих заданному шаблону.
  • Функция unlink() удаляет заданный файл.

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

Функция PHP для удаления всех файлов из папки:

Использование:

Как видите, в функции deleteFiles() мы использовали шаблон '/*', чтобы указать glob() получить имена всех файлов из папки.

Затем мы перебираем файлы один за другим и проверяем, является ли элемент файлом, а не самой вложенной папкой, используя функцию is_file().

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

Удалить из папки только файлы определенного типа:

Скажем, вы не хотите удалять все файлы, а только файлы PDF из папки. Тогда вот сценарий задачи.

Удалить файлы старше X дней из папки:

Это еще один полезный вариант скрипта. Предположим, вы хотите удалить старые файлы, скажем, возрастом не менее 90 дней. Вам нужно просто проверить, превышает ли дата и время последнего изменения файла более 90 дней, и удалить, если это так.

Чтобы проверить, старше ли файлов более 90 дней, мы использовали filemtime() для получения метки времени последнего изменения данного файла, брали разницу с текущей меткой времени и сравнивали ее со счетом 90 дней.

Удалить все файлы и подпапки из папки в PHP:

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

Просто удалить папку с помощью rmdir() не получится. Это вызовет исключение, если вы попытаетесь удалить папку с файлами в ней. Итак, сначала вам нужно удалить файлы один за другим из каждой подпапки плюс остальные файлы, а затем удалить папки, удалив родительскую папку.

Вот рекурсивная функция php для удаления файлов и подпапок из папки.

Использование функции:

Он позаботится об автоматическом удалении всех файлов и подпапок из папки.

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

Удаляет имя файла . Подобно функции Unix C unlink(). В случае сбоя будет сгенерирована ошибка уровня E_WARNING.

Параметры

Путь к файлу.

Если файл является символической ссылкой, символическая ссылка будет удалена. В Windows для удаления символической ссылки на каталог необходимо использовать rmdir().

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

Возвращает true в случае успеха или false в случае неудачи.

Журнал изменений

Версия Описание
7.3.0 Вкл. Windows, теперь можно unlink() файлы с используемыми дескрипторами, хотя раньше это не удавалось. Однако по-прежнему невозможно воссоздать несвязанный файл, пока все его дескрипторы не будут закрыты.

Примеры

См. также

Пользовательские заметки 11 заметок

Это приведет к удалению всех файлов в каталоге, соответствующих шаблону в одной строке кода.

('unlink', glob("some/dir/*.txt" )); ?>

Удалили большой файл, но не видите увеличения свободного места или уменьшения использования диска? Используете UNIX или другую ОС POSIX?

Unlink() предназначена не для удаления файла, а для удаления имени файла. В справочной странице сказано: ``unlink - удалить имя и, возможно, файл, на который оно ссылается''.

Большую часть времени файл имеет только одно имя — его удаление также удалит (освободит, освободит) «тело» файла (с одной оговоркой, см. ниже). Это простой, обычный случай.

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

Предупреждение:
Тело файла может *также* быть `поддержано живым' (все еще использующим дисковое пространство) процессом, удерживающим файл открытым. Тело не будет освобождено (не освободит место на диске), пока процесс держит его открытым. На самом деле, есть причудливый способ воскресить файл, удаленный по ошибке, но все еще открытый процессом.

отключить($fileName); у меня не получилось.
Затем я попытался использовать функцию realpath($fileName) как
unlink(realpath($fileName)); это сработало

просто опубликую на случай, если кому-то это покажется полезным.

Вот самый простой способ удалить файлы с маской

= "*.jpg"
array_map ("unlink", glob ($mask));
?>

Я работал над небольшой пробной версией, в которой перед изменением основного текстового файла был создан файл резервной копии. Затем при возникновении ошибки основной файл будет удален (отключен), а вместо него будет возвращен файл резервной копии.

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

Наконец-то я понял, что не так: поскольку я работал с файлом и еще не закрыл его, он все еще использовался и, конечно же, не мог быть удален :)

Поэтому я решил упомянуть об этом здесь, чтобы другие не совершали ту же ошибку:

// Сначала закрываем файл
fclose ( $fp );

// Затем отвязать :)
отключить ( $somefile );
?>

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

foreach ( glob ("*.jpg" ) as $filename ) echo " Размер $filename " . размер файла ($имя_файла). "\п" ;
отключить ( $filename );
>

Это может показаться очевидным, но я рвал на себе волосы из-за этой проблемы — убедитесь, что файл, который вы пытаетесь удалить, в настоящее время не используется. У меня был скрипт, который анализировал текстовый файл и должен был удалить его после завершения, но продолжал получать ошибку отказа в разрешении, потому что я явно не закрыл файл, следовательно, технически он все еще «использовался», хотя анализ был завершено.

Для тех, у кого была проблема с ошибкой отказа в правах, она иногда возникает, когда вы пытаетесь удалить файл, который находится в папке выше в иерархии, в ваш рабочий каталог (например, при попытке удалить путь, начинающийся с ". ./").

Поэтому, чтобы обойти эту проблему, вы можете использовать chdir(), чтобы изменить рабочий каталог на папку, в которой находится файл, связь с которым вы хотите отменить.

= getcwd(); // Сохраняем текущий каталог
chdir ( $path_to_file );
отключить ( $filename );
chdir ( $old ); // Восстановить старый рабочий каталог
?>

В OSX при борьбе с ошибкой «Отказано в доступе» убедитесь, что у каталога есть разрешения на запись для исполняющего пользователя php.

Кроме того, если вы полагаетесь на списки управления доступом и хотите удалить файл или символическую ссылку, у содержащего каталога должно быть разрешение «delete_child», чтобы отменить связь между вещами внутри. Если вы предоставите «удалить» только папке, это позволит вам удалить саму папку-контейнер, но не объекты внутри.

unlink работает так же, как команда rm в nix на основе потерь или команда del в Windows, она не разрешает файл, а удаляет точный указанный путь, даже если этот путь является просто ссылкой.

EG
/var/www/test/index.php = symlink(/home/test/www/index.php)
( "/var/www/test/index.php" ) ;
?>
Будет удалена только ссылка, а не исходный файл, где как
( "/home/test/www/index.php" );
?>
Отключит исходный путь к файлу и разорвет символическую ссылку, а также позволит перезаписать систему, поскольку файловая система больше не будет знать о местоположении файла.

Лучший способ удалить файлы по маске:
( glob ( '/etc/*' ), 'unlink' );
?>
Не используйте array_map, упомянутый ниже, - его цель - обработать значения в заданном массиве И СОБИРАТЬ данные, возвращаемые функцией обратного вызова. Таким образом, array_map работает медленнее и использует дополнительную память по сравнению с array_walk.

Этот вопрос был закрыт, поскольку речь не шла об официальной версии Ubuntu. В настоящее время ответы не принимаются.

Хотите улучшить этот вопрос? Обновите вопрос, чтобы он соответствовал теме Ask Ubuntu.

Закрыт 3 года назад.

Я хочу удалить все файлы и каталоги, кроме определенных файлов, имена которых я хочу указать. Есть ли какой-нибудь PHP-скрипт, который может мне помочь?

Вот пример:

Я хочу удалить все файлы, кроме .htaccess, index.php и каталога [file].

Есть ли какая-либо команда, которая может сохранить эти файлы и удалить другие файлы или любой php-код?

2 ответа 2

Командная строка

Сначала сделайте копию всего:

где /to/a/save/place — любой каталог, не указанный в этом пути.

Теперь вы можете использовать следующую команду:

удалить файлы из php

Если вам нужно использовать php, вы можете взять эту функцию и изменить ее, чтобы оставить нужные файлы и каталоги.

Почему бы просто не использовать tar -cf /ta/a/safe/place/backup.tar *? Расширенные операторы сопоставления с образцом, такие как !(…) необходимо включить параметр оболочки extglob, которого по умолчанию может не быть (проверьте это с помощью bash -O|grep extglob ) — запустите shopt -s extglob, чтобы включить его.

Вы меня неправильно поняли, bash -O показывает, что установлено по умолчанию в вашей системе, не читая .bashrc и тому подобное, чтобы показать ваши текущие настройки, запустите shopt extglob (без -s ).

Команда Trash из Trash-Cli очень удобна для таких вещей. Он доступен в репозитории юниверса, и вы можете установить его, если у вас его нет, с помощью команды sudo apt install trash-cli

После установки вы можете просто ввести команду

trash !(.htaccess|index.php|file), который указывает удалить все, что не соответствует тому, что указано в скобках. В данном случае .htaccess , index.php и файл каталога.

Конечно, для этого требуется включить расширенное сопоставление с образцом с помощью shopt -s extglob, как упомянуто десертом в этом комментарии

При таком подходе действительно нет необходимости делать резервную копию всего в файле tar, поскольку все, что вы удаляете, будет в корзине, и если вы допустите ошибку, вы можете восстановить ее с помощью restore-trash и выбора соответствующего файла или каталога, который вы хотите восстановить.

Читайте также: