В этом разделе рассматривается пример процесса удаления файлов и директорий. Процесс включает два основных этапа:
- Создание объектной модели дерева файлов и директорий связанных с файловой системой.
- Удаление файлов с диска на основе созданной модели.
В этом примере используются структурные методы для работы с объектами директорий. Если вы ещё не читали этот раздел, я рекомендую вам прочитать. Ссылка на раздел "Структурные методы директорий".
📌 Консольная команда в этом примере создается для выдуманного приложения. Для понимания как работает метод удаления и понимания структуры модуля в примере, следует прочитать раздел с описанием. Код для запуска можно скачать из этого репозитория.
Для очистки кеша требуется сделать консольную команду. Команда должна не иметь параметров и удалять
папку example/var/cache
с ее содержимым.
❗ Это концептуальный пример. Для простоты в примере мы исходим из того, что папка
example/var/cache
может содержать только файлы. Если в этой папке будут вложенные директории, этот пример не сработает. Чтобы была возможность удалять вложенные папки с файлами, нужно обходить директорию рекурсивно и собирать объектную модель в точности как на диске. Для понимания процесса удаления, данного примера вполне хватит.
Напишем класс, который будет удалять папку example/var/cache
.
<?php
namespace Example;
use Vinograd\SimpleFiles\Directory;
use Vinograd\SimpleFiles\File;
class CacheCleaner
{
public function clean(string $path): void
{
$cacheFiles = glob($path . '/*');
$varCacheDirectory = Directory::createBinded($path);
foreach ($cacheFiles as $filePath) {
$varCacheDirectory->addFile(File::createBinded($filePath));
}
$varCacheDirectory->delete();
}
}
Класс состоит из одного метода clean
, который принимает в качестве параметра абсолютный путь к папке
example/var/cache
.
Код тела метода состоит из трёх основных частей: получение всех путей к файлам в заданной папке, создание модели
файловой системы на основе этих путей и, наконец, удаление с диска папки example/var/cache
и всех содержащихся в ней
файлов с использованием полученной модели.
Рассмотрим процесс. Функция glob
находит все файлы на основе аргумента $path
. Затем создается объект директории
связанный с папкой по пути взятого из значения аргумента $path
(.../example/var/cache
) на диске. Далее, в цикле,
создаются объекты файлов связанные с реальными файлами на диске и добавляются к объекту директории. Когда вся модель
создана, у объекта директории вызывается метод delete
.
❗ Важной особенностью метода “delete” является то, что после его вызова не только удаляются файлы и директории с диска, но и разрушаются все внутренние связи удаляемой модели. Такая модель становится непригодной для последующего использования в коде.
Напишем “файл запуска”, в котором проверим, существует ли папка example/var/cache
. Если она существует, вызовем
метод clean
у созданного объекта \Example\CacheCleaner
, передав в него путь к папке с кешем.
Код:
#!/usr/bin/env php
<?php
declare(strict_types=1);
require_once dirname(__DIR__, 1) . '/vendor/autoload.php';
if (PHP_SAPI !== 'cli') exit(1);
$varPath = realpath(__DIR__ . '/../var');
$varCachePath = $varPath . '/cache';
$message = 'The cache has been cleared.' . PHP_EOL;
if (!is_dir($varCachePath)) {
echo $message;
exit(0);
}
(new \Example\CacheCleaner())->clean($varCachePath);
echo $message;
В итоге команда для очистки кеша будет такой:
php delete
Пример для запуска вы можете клонировать себе из этого репозитория.
Чтобы запустить команду, перейдите в консоли в папку bin
скачанного проекта:
cd path/to/cloned/example/bin/
Где path/to/cloned
та папка, в которую вы скачали пример. После этого можно очистить кеш командой php delete
.
В проекте с примером уже создана папка example/var/cache
в которой лежат три файла, имитирующих
кеш. После выполнения команды будут удалены эти три файла в месте с директорией example/var/cache
.