- Описание скрипта конвертации изображений в WebP (CLI‑версия 4.4 уже 4.5)
- Назначение
- Основные функции
- Параметры конфигурации ($CONFIG)
- Аргументы командной строки
- Процесс работы
- Обрабатываемые сценарии
- Выходные данные
- Требования
- Ограничения
- Рекомендации
- Лицензия
- Релизы:
- Как использовать скрипт массовой конвертации в WebP (CLI)
- 1. Подготовка
- 2. Запуск скрипта
- 3. Настройка параметров (файл converter.php)
- Рекомендации
- Устранение ошибок
- Как это работает
- Важные замечания перед настройкой
- Примеры расписаний cron
- 1. Ежедневная конвертация (в 3:00 ночи)
- 2. Еженедельная конвертация (по воскресеньям в 4:00)
- 3. Каждые 6 часов
- Разбор команды (на примере ежедневного запуска)
- Ключевые отличия
- Вывод
- Тестирование на больших объёмах:
Описание скрипта конвертации изображений в WebP (CLI‑версия 4.4 уже 4.5)
Назначение
Скрипт предназначен для массовой конвертации изображений форматов JPG, JPEG, PNG и GIF в современный формат WebP через командную строку (CLI). Оптимизирован для серверного использования с контролем ресурсов и детализированным логированием.
Основные функции
- Поддержка нескольких форматов
- Входные: JPG, JPEG, PNG, GIF (с анимацией через Imagick).
- Выходной: WebP (с потерями или без, в зависимости от настроек).
- Гибкие настройки конвертации
- Качество сжатия (0–100).
- Метод сжатия WebP (для Imagick: 0–6).
- Возможность принудительной перезаписи существующих файлов.
- Безопасность данных
- Проверка свободного места на диске.
- Контроль размера файлов (пропуск слишком больших).
- Режим Dry‑Run (имитация без изменений).
- Резервное копирование не требуется — оригиналы удаляются только по явному запросу.
- Логирование
- JSON‑лог (для машинного анализа).
- Текстовый лог (для человека).
- Детализация по каждому файлу: ошибки, размеры, время обработки.
- Обработка ошибок
- Повторные попытки конвертации (до 3 раз).
- Пропуск недоступных/нечитаемых файлов.
- Защита от символических ссылок.
- Оптимизация ресурсов
- Ограничение памяти PHP.
- Таймаут выполнения.
- Пакетная обработка (batch size).
- Очистка памяти после каждой операции.
Параметры конфигурации ($CONFIG)
quality— качество WebP (0–100).delete_originals— удалять оригиналы после конвертации.batch_size— количество файлов в одной пачке (для контроля нагрузки).log_dir— папка для логов.allowed_extensions— разрешённые входные форматы.memory_limit— лимит памяти PHP.max_execution_time— максимальное время выполнения (0 — без лимита).webp_method— метод сжатия WebP для Imagick.max_attempts— число попыток конвертации при ошибке.dry_run— режим имитации (без реальных изменений).min_free_space— минимальное свободное место на диске (в байтах).max_file_size— максимальный размер файла для обработки (в байтах).force_convert— перезаписывать существующие .webp.
Аргументы командной строки
При запуске через CLI:
php converter.php <папка> <качество> <удалять_оригиналы> <dry_run> <force>
<папка>— путь к директории с изображениями.<качество>— число от 0 до 100 (качество WebP).<удалять_оригиналы>—yesилиno.<dry_run>—dry-run(имитация) илиno(реальная конвертация).<force>—force(перезаписывать .webp) илиno.
Пример:
php converter.php /images/ 85 yes dry-run force
Процесс работы
- Проверка зависимостей
- Наличие
ImagickилиGD.
- Наличие
- Валидация входных данных
- Существование папки.
- Права доступа.
- Корректность параметров.
- Подготовка логов
- Создание папки логов (если отсутствует).
- Запись стартовых метаданных.
- Поиск файлов
- По шаблону
*.jpg,*.jpeg,*.png,*.gif. - Фильтрация по размеру и доступности.
- По шаблону
- Конвертация
- Для каждого файла:
- Проверка актуальности существующего .webp (если не
force_convert). - Конвертация через Imagick (приоритет) или GD.
- Запись лога.
- Удаление оригинала (если запрошено).
- Проверка актуальности существующего .webp (если не
- Для каждого файла:
- Отчётность
- Итоговый вывод в консоль.
- Статистика сжатия (если были конвертации).
- Финальный лог с деталями.
Обрабатываемые сценарии
- Успешная конвертация → запись .webp, удаление оригинала (если нужно).
- Ошибка конвертации → повторная попытка (до 3 раз), затем пропуск.
- Файл слишком большой → пропуск с записью в лог.
- Мало места на диске → аварийное завершение.
- .webp уже актуален → пропуск (если не
force_convert). - Dry‑Run → имитация, без изменений файлов.
Выходные данные
- Консоль
- Ход выполнения (прогресс, ошибки, статистика).
- Итоговый отчёт с временем и количеством файлов.
- Лог‑файлы
webp-conversion-YYYYMMDD-HHMMSS.log(JSON).webp-conversion-YYYYMMDD-HHMMSS.log.txt(текст).
- Файлы WebP
- Сохраняются в той же директории, что и оригиналы.
- Имя:
<оригинальное_имя>.webp.
Требования
- PHP ≥ 7.4.
- Расширение
Imagick(рекомендуется) илиGD. - Права на чтение/запись в целевой папке и папке логов.
- Свободное место на диске ≥
min_free_space.
Ограничения
- Только для личного использования (см. лицензию).
- Не поддерживает:
- RAW‑форматы.
- SVG.
- Видео.
- Для GIF:
- GD не конвертирует.
- Imagick сохраняет анимацию, но с ограничениями.
Рекомендации
- Перед запуском:
- Сделайте резервную копию данных.
- Проверьте права доступа.
- Протестируйте на небольшой папке.
- Для больших объёмов:
- Уменьшите
batch_size. - Увеличьте
memory_limit. - Используйте
dry_runдля проверки.
- Уменьшите
- Мониторинг:
- Следите за логами.
- Контролируйте свободное место.
Лицензия
Проприетарное ПО Web-Software.ru.
Запрещено:
- Коммерческое использование.
- Распространение.
- Модификация без письменного согласия.
Релизы:
CLI converter version 4.4
CLI converter version 4.5
Как использовать скрипт массовой конвертации в WebP (CLI)
1. Подготовка
Требования к серверу:
- PHP 7.4+
- Включено одно из расширений:
Imagick(рекомендуется) илиGD(ограниченная поддержка: не конвертирует GIF)
- Права на чтение/запись в целевой папке и папке логов (
/logs).
Проверьте зависимости:
php -m | grep -E 'imagick|gd'
Если ничего не найдено — установите нужное расширение.
2. Запуск скрипта
Базовый синтаксис:
php converter.php <папка> [качество] [удалить_оригиналы] [dry-run] [force]
Параметры:
<папка>— путь к директории с изображениями (обязательно).
Пример:php converter.php /var/www/images.[качество]— качество WebP (0–100). По умолчанию:90.
Пример:php converter.php /var/www/images 80.[удалить_оригиналы]—yes/no. Удалять исходники после конвертации? По умолчанию:no.
Пример:php converter.php /var/www/images 90 yes.[dry-run]—dry-runдля тестового режима (без конвертации). По умолчанию: отключено.
Пример:php converter.php /var/www/images dry-run.[force]—forceдля перезаписи существующих.webp. По умолчанию: пропускаются.
Пример:php converter.php /var/www/images force.
Примеры полных команд:
# Стандартная конвертация (качество 90, оригиналы остаются)
php converter.php ./photos
# Конвертация с удалением оригиналов (качество 85)
php converter.php ./images 85 yes
# Тестовый режим (проверка без изменений)
php converter.php ./backup dry-run
# Перезапись существующих .webp (качество 95)
php converter.php ./assets 95 no force
3. Настройка параметров (файл converter.php)
Измените значения в массиве $CONFIG под свои нужды:
$CONFIG = [
'quality' => 90, // Качество сжатия WebP (0–100). Чем выше значение, тем лучше качество, но больше размер файла.
'delete_originals' => true, // Удалять исходные файлы после успешной конвертации? true — да, false — нет.
'batch_size' => 1000, // Количество файлов в одной итерации (пакете). Уменьшите для слабых серверов, увеличьте для мощных.
'log_dir' => __DIR__ . '/logs', // Путь к папке для хранения логов. __DIR__ — текущая директория скрипта.
'allowed_extensions' => ['jpg', 'jpeg', 'png', 'gif'], // Разрешённые расширения исходных файлов. Конвертируются только эти типы.
'memory_limit' => '256M', // Лимит памяти PHP для выполнения скрипта. Увеличьте при ошибках нехватки памяти.
'max_execution_time' => 0, // Максимальное время выполнения скрипта (в секундах). 0 — без лимита.
'webp_method' => '4', // Метод сжатия WebP (для Imagick). Значения: 0–6. Чем выше, тем сильнее сжатие (но дольше обработка).
'max_attempts' => 3, // Количество попыток конвертации одного файла при ошибке. После — пропуск файла.
'dry_run' => false, // Режим «только проверка»: не конвертирует файлы, а лишь имитирует процесс. true — включить, false — выключить.
'min_free_space' => 104857600, // Минимальное свободное место на диске (в байтах). 100 МБ = 104 857 600 байт. Если меньше — конвертация прерывается.
'max_file_size' => 52428800, // Максимальный размер исходного файла (в байтах). 50 МБ = 5 242 880 байт. Файлы больше — пропускаются.
'force_convert' => false // Принудительно перезаписывать существующие .webp-файлы? true — перезаписывать, false — пропускать, если .webp новее оригинала.
];
Важные настройки:
'delete_originals'— осторожно! Удаляет исходники.'dry_run'— включите для проверки перед реальной конвертацией.'force_convert'— перезаписывает.webp, даже если они новее оригиналов.'max_file_size'— файлы больше указанного размера пропускаются.
Рекомендации
- Тестируйте на копии данных перед запуском в продакшене.
- Используйте
dry-runдля проверки путей и настроек. - Контролируйте свободное место — конвертация требует дискового пространства.
- Следите за памятью — при ошибках увеличьте
memory_limit. - Резервируйте изображения перед включением
delete_originals. - Для больших объёмов уменьшите
batch_size, чтобы избежать тайм-аутов.
Устранение ошибок
- Нет Imagick/GD → Установите расширение через пакетный менеджер (например,
apt install php-imagick). - Недостаточно прав → Проверьте права на папку (
chmod 755). - Мало места на диске → Очистите пространство или измените
min_free_space. - Тайм-аут → Увеличьте
max_execution_timeили уменьшитеbatch_size. - Ошибки конвертации → Проверьте логи (
*.log.txt) для деталей.
Если ваш сайт/проект содержит много часто обновляемого контента, а скрипт конвертации не отслеживает изменения автоматически (например, новые/изменённые изображения), решение — запускать его по расписанию через cron.
Это гарантирует, что:
- новые файлы будут обработаны;
- старые файлы при необходимости переконвертируются;
- процесс не зависит от действий пользователя.
Как это работает
- Вы определяете периодичность (ежедневно, раз в неделю, каждые N часов).
- Cron запускает скрипт в указанное время.
- Скрипт обрабатывает все подходящие файлы в заданной папке (например,
img/). - Результаты и ошибки записываются в лог для контроля.
Важные замечания перед настройкой
- Пути к файлам зависят от сервера. В примерах ниже используйте ваши реальные пути.
- Проверьте права доступа: у cron‑пользователя должны быть права на:
- чтение скрипта (
converter.php); - доступ к папке с изображениями;
- запись в папку логов.
- Убедитесь, что PHP установлен и путь к нему корректен (обычно
/usr/bin/php). - Тестируйте команду вручную перед добавлением в cron:
/usr/bin/php /путь/к/converter.php /путь/к/img 90 no 1
Примеры расписаний cron
1. Ежедневная конвертация (в 3:00 ночи)
0 3 * * * /usr/bin/php /home/web/sites/ваш_сайт/CLIconverter/converter.php /home/web/sites/ваш_сайт/img 90 no 1 >> /home/web/cron-logs/converter.log 2>&1
Когда: каждый день в 03:00.
Зачем: подходит для сайтов с ежедневным обновлением контента.
2. Еженедельная конвертация (по воскресеньям в 4:00)
0 4 * * 0 /usr/bin/php /home/web/sites/ваш_сайт/CLIconverter/converter.php /home/web/sites/ваш_сайт/img 90 no 1 >> /home/web/cron-logs/converter.log 2>&1
Когда: каждое воскресенье в 04:00.
Зачем: для проектов с умеренной частотой обновлений (например, блогов).
3. Каждые 6 часов
0 */6 * * * /usr/bin/php /home/web/sites/ваш_сайт/CLIconverter/converter.php /home/web/sites/ваш_сайт/img 90 no 1 >> /home/web/cron-logs/converter.log 2>&1
Когда: в 00:00, 06:00, 12:00 и 18:00 ежедневно.
Зачем: для высоконагруженных проектов с частыми обновлениями (например, маркетплейсов).
Разбор команды (на примере ежедневного запуска)
0 3 * * * /usr/bin/php /home/web/sites/ваш_сайт/CLIconverter/converter.php /home/web/sites/ваш_сайт/img 90 no 1 >> /home/web/cron-logs/converter.log 2>&1
0 3 * * *— время запуска: минута0, час3(03:00), любой день/месяц/день недели./usr/bin/php— путь к исполняемому PHP (проверьте черезwhich php)./home/web/sites/ваш_сайт/CLIconverter/converter.php— полный путь к скрипту./home/web/sites/ваш_сайт/img— папка с исходными изображениями.90— качество WebP (0–100).no— не удалять оригиналы после конвертации.1— дополнительный параметр (1 — конвертирует по одному файлу).>> /home/web/cron-logs/converter.log— запись вывода скрипта в лог‑файл.2>&1— добавление ошибок (stderr) в тот же лог.
Ниже — детальное сравнение двух версий скрипта для конвертации изображений в формат WebP.
Ключевые отличия
Скрипт имеет в своем составе две версии converter.php и converter-simpli.php
- Способ задания исходной папки (
source_dir)- Оригинальная версия (
converter.php):
Путь к папке задаётся через аргумент командной строки ($argv[1]). Если аргумент не передан, используется текущая директория скрипта (__DIR__). - Упрощённая версия (
converter-simpli.php):
Путь прописывается в настройках скрипта ($CONFIG['source_dir']). Есть примеры для разных ОС (Windows, Linux/macOS) и вариант с подпапкойinput.
- Оригинальная версия (
- Гибкость настройки параметров
- Оригинал:
Большинство параметров (качество, удаление оригиналов и т. д.) можно переопределить через аргументы командной строки ($argv[2],$argv[3]и т. д.). - Simpli-версия:
Все параметры задаются только в массиве$CONFIG— аргументы командной строки не поддерживаются. Это упрощает использование, но снижает гибкость.
- Оригинал:
- Обработка аргументов командной строки
- Оригинал активно использует
$argvдля:- задания качества (
$argv[2]), - управления удалением оригиналов (
$argv[3]), - режима
dry-run($argv[4]), - принудительной перезаписи (
$argv[5]).
- задания качества (
- Simpli-версия полностью отказалась от
$argv— все настройки жёстко прописаны в$CONFIG.
- Оригинал активно использует
- Валидация настроек
- Оригинал:
Проверяет корректность пути к папке после разбора аргументов. - Simpli-версия:
Валидирует путь к папке сразу после чтения$CONFIG['source_dir'](до начала конвертации).
- Оригинал:
- Комментарии и документация
- Simpli-версия содержит более подробные комментарии к настройке
$CONFIG, включая примеры путей для разных ОС. - В оригинале комментарии сосредоточены на логике работы, а не на конфигурации.
- Simpli-версия содержит более подробные комментарии к настройке
- Структура кода
- Simpli-версия выглядит более компактной за счёт:
- отказа от обработки аргументов,
- объединения валидации настроек в начале скрипта.
- Оригинал имеет более модульную структуру с явным разделением на:
- разбор аргументов,
- валидацию,
- основную логику.
- Simpli-версия выглядит более компактной за счёт:
- Режим
dry-runи принудительная перезапись- В оригинале эти режимы активируются через аргументы (
dry-run,force). - В Simpli-версии они задаются в
$CONFIG('dry_run' => false,'force_convert' => false).
- В оригинале эти режимы активируются через аргументы (
- Обработка ошибок
- Обе версии проверяют:
- наличие расширений Imagick/GD,
- права доступа к папкам,
- свободное место на диске.
- Различия минимальны и связаны с порядком проверок (из-за разной структуры кода).
- Обе версии проверяют:
- Логирование
- Функционал идентичен:
- JSON-лог и текстовый лог,
- запись прогресса, ошибок, статистики.
- Отличия только в порядке вызовов (из-за реорганизации кода).
- Функционал идентичен:
- Целевая аудитория
- Оригинал рассчитан на опытных пользователей, которые:
- запускают скрипт из командной строки,
- настраивают параметры «на лету» через аргументы.
- Simpli-версия ориентирована на новичков, которым проще:
- отредактировать настройки в файле,
- запустить скрипт без аргументов.
- Оригинал рассчитан на опытных пользователей, которые:
Вывод
- Используйте
converter.php, если нужна:- гибкость настройки через командную строку,
- интеграция в автоматизированные процессы (CI/CD, cron).
- Выбирайте
converter-simpli.php, если:- хотите минимизировать риск ошибок при настройке,
- предпочитаете редактировать параметры в одном месте (в коде),
- запускаете скрипт вручную без сложных аргументов.



