CLI converter version 4.4(4.5)

CLI converter version 4.5

Описание скрипта конвертации изображений в WebP (CLI‑версия 4.4 уже 4.5)

Назначение

Скрипт предназначен для массовой конвертации изображений форматов JPG, JPEG, PNG и GIF в современный формат WebP через командную строку (CLI). Оптимизирован для серверного использования с контролем ресурсов и детализированным логированием.


Основные функции

  1. Поддержка нескольких форматов
    • Входные: JPG, JPEG, PNG, GIF (с анимацией через Imagick).
    • Выходной: WebP (с потерями или без, в зависимости от настроек).
  2. Гибкие настройки конвертации
    • Качество сжатия (0–100).
    • Метод сжатия WebP (для Imagick: 0–6).
    • Возможность принудительной перезаписи существующих файлов.
  3. Безопасность данных
    • Проверка свободного места на диске.
    • Контроль размера файлов (пропуск слишком больших).
    • Режим Dry‑Run (имитация без изменений).
    • Резервное копирование не требуется — оригиналы удаляются только по явному запросу.
  4. Логирование
    • JSON‑лог (для машинного анализа).
    • Текстовый лог (для человека).
    • Детализация по каждому файлу: ошибки, размеры, время обработки.
  5. Обработка ошибок
    • Повторные попытки конвертации (до 3 раз).
    • Пропуск недоступных/нечитаемых файлов.
    • Защита от символических ссылок.
  6. Оптимизация ресурсов
    • Ограничение памяти 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>
  1. <папка> — путь к директории с изображениями.
  2. <качество> — число от 0 до 100 (качество WebP).
  3. <удалять_оригиналы>yes или no.
  4. <dry_run>dry-run (имитация) или no (реальная конвертация).
  5. <force>force (перезаписывать .webp) или no.

Пример:

php converter.php /images/ 85 yes dry-run force

Процесс работы

  1. Проверка зависимостей
    • Наличие Imagick или GD.
  2. Валидация входных данных
    • Существование папки.
    • Права доступа.
    • Корректность параметров.
  3. Подготовка логов
    • Создание папки логов (если отсутствует).
    • Запись стартовых метаданных.
  4. Поиск файлов
    • По шаблону *.jpg, *.jpeg, *.png, *.gif.
    • Фильтрация по размеру и доступности.
  5. Конвертация
    • Для каждого файла:
      • Проверка актуальности существующего .webp (если не force_convert).
      • Конвертация через Imagick (приоритет) или GD.
      • Запись лога.
      • Удаление оригинала (если запрошено).
  6. Отчётность
    • Итоговый вывод в консоль.
    • Статистика сжатия (если были конвертации).
    • Финальный лог с деталями.

Обрабатываемые сценарии

  • Успешная конвертация → запись .webp, удаление оригинала (если нужно).
  • Ошибка конвертации → повторная попытка (до 3 раз), затем пропуск.
  • Файл слишком большой → пропуск с записью в лог.
  • Мало места на диске → аварийное завершение.
  • .webp уже актуален → пропуск (если не force_convert).
  • Dry‑Run → имитация, без изменений файлов.

Выходные данные

  1. Консоль
    • Ход выполнения (прогресс, ошибки, статистика).
    • Итоговый отчёт с временем и количеством файлов.
  2. Лог‑файлы
    • webp-conversion-YYYYMMDD-HHMMSS.log (JSON).
    • webp-conversion-YYYYMMDD-HHMMSS.log.txt (текст).
  3. Файлы WebP
    • Сохраняются в той же директории, что и оригиналы.
    • Имя: <оригинальное_имя>.webp.

Требования

  • PHP ≥ 7.4.
  • Расширение Imagick (рекомендуется) или GD.
  • Права на чтение/запись в целевой папке и папке логов.
  • Свободное место на диске ≥ min_free_space.

Ограничения

  • Только для личного использования (см. лицензию).
  • Не поддерживает:
    • RAW‑форматы.
    • SVG.
    • Видео.
  • Для GIF:
    • GD не конвертирует.
    • Imagick сохраняет анимацию, но с ограничениями.

Рекомендации

  1. Перед запуском:
    • Сделайте резервную копию данных.
    • Проверьте права доступа.
    • Протестируйте на небольшой папке.
  2. Для больших объёмов:
    • Уменьшите batch_size.
    • Увеличьте memory_limit.
    • Используйте dry_run для проверки.
  3. Мониторинг:
    • Следите за логами.
    • Контролируйте свободное место.

Лицензия

Проприетарное ПО 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]

Параметры:

  1. <папка> — путь к директории с изображениями (обязательно).
    Пример: php converter.php /var/www/images.
  2. [качество] — качество WebP (0–100). По умолчанию: 90.
    Пример: php converter.php /var/www/images 80.
  3. [удалить_оригиналы]yes/no. Удалять исходники после конвертации? По умолчанию: no.
    Пример: php converter.php /var/www/images 90 yes.
  4. [dry-run]dry-run для тестового режима (без конвертации). По умолчанию: отключено.
    Пример: php converter.php /var/www/images dry-run.
  5. [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' — файлы больше указанного размера пропускаются.

Рекомендации

  1. Тестируйте на копии данных перед запуском в продакшене.
  2. Используйте dry-run для проверки путей и настроек.
  3. Контролируйте свободное место — конвертация требует дискового пространства.
  4. Следите за памятью — при ошибках увеличьте memory_limit.
  5. Резервируйте изображения перед включением delete_originals.
  6. Для больших объёмов уменьшите batch_size, чтобы избежать тайм-аутов.

Устранение ошибок

  • Нет Imagick/GD → Установите расширение через пакетный менеджер (например, apt install php-imagick).
  • Недостаточно прав → Проверьте права на папку (chmod 755).
  • Мало места на диске → Очистите пространство или измените min_free_space.
  • Тайм-аут → Увеличьте max_execution_time или уменьшите batch_size.
  • Ошибки конвертации → Проверьте логи (*.log.txt) для деталей.

Если ваш сайт/проект содержит много часто обновляемого контента, а скрипт конвертации не отслеживает изменения автоматически (например, новые/изменённые изображения), решение — запускать его по расписанию через cron.

Это гарантирует, что:

  • новые файлы будут обработаны;
  • старые файлы при необходимости переконвертируются;
  • процесс не зависит от действий пользователя.

Как это работает

  1. Вы определяете периодичность (ежедневно, раз в неделю, каждые N часов).
  2. Cron запускает скрипт в указанное время.
  3. Скрипт обрабатывает все подходящие файлы в заданной папке (например, img/).
  4. Результаты и ошибки записываются в лог для контроля.

Важные замечания перед настройкой

  • Пути к файлам зависят от сервера. В примерах ниже используйте ваши реальные пути.
  • Проверьте права доступа: у 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
  1. 0 3 * * * — время запуска: минута 0, час 3 (03:00), любой день/месяц/день недели.
  2. /usr/bin/php — путь к исполняемому PHP (проверьте через which php).
  3. /home/web/sites/ваш_сайт/CLIconverter/converter.php — полный путь к скрипту.
  4. /home/web/sites/ваш_сайт/img — папка с исходными изображениями.
  5. 90 — качество WebP (0–100).
  6. no — не удалять оригиналы после конвертации.
  7. 1 — дополнительный параметр (1 — конвертирует по одному файлу).
  8. >> /home/web/cron-logs/converter.log — запись вывода скрипта в лог‑файл.
  9. 2>&1 — добавление ошибок (stderr) в тот же лог.

Ниже — детальное сравнение двух версий скрипта для конвертации изображений в формат WebP.

Ключевые отличия

Скрипт имеет в своем составе две версии converter.php и converter-simpli.php

  1. Способ задания исходной папки (source_dir)
    • Оригинальная версия (converter.php):
      Путь к папке задаётся через аргумент командной строки ($argv[1]). Если аргумент не передан, используется текущая директория скрипта (__DIR__).
    • Упрощённая версия (converter-simpli.php):
      Путь прописывается в настройках скрипта ($CONFIG['source_dir']). Есть примеры для разных ОС (Windows, Linux/macOS) и вариант с подпапкой input.
  2. Гибкость настройки параметров
    • Оригинал:
      Большинство параметров (качество, удаление оригиналов и т. д.) можно переопределить через аргументы командной строки ($argv[2], $argv[3] и т. д.).
    • Simpli-версия:
      Все параметры задаются только в массиве $CONFIG — аргументы командной строки не поддерживаются. Это упрощает использование, но снижает гибкость.
  3. Обработка аргументов командной строки
    • Оригинал активно использует $argv для:
      • задания качества ($argv[2]),
      • управления удалением оригиналов ($argv[3]),
      • режима dry-run ($argv[4]),
      • принудительной перезаписи ($argv[5]).
    • Simpli-версия полностью отказалась от $argv — все настройки жёстко прописаны в $CONFIG.
  4. Валидация настроек
    • Оригинал:
      Проверяет корректность пути к папке после разбора аргументов.
    • Simpli-версия:
      Валидирует путь к папке сразу после чтения $CONFIG['source_dir'] (до начала конвертации).
  5. Комментарии и документация
    • Simpli-версия содержит более подробные комментарии к настройке $CONFIG, включая примеры путей для разных ОС.
    • В оригинале комментарии сосредоточены на логике работы, а не на конфигурации.
  6. Структура кода
    • Simpli-версия выглядит более компактной за счёт:
      • отказа от обработки аргументов,
      • объединения валидации настроек в начале скрипта.
    • Оригинал имеет более модульную структуру с явным разделением на:
      • разбор аргументов,
      • валидацию,
      • основную логику.
  7. Режим dry-run и принудительная перезапись
    • В оригинале эти режимы активируются через аргументы (dry-run, force).
    • В Simpli-версии они задаются в $CONFIG ('dry_run' => false, 'force_convert' => false).
  8. Обработка ошибок
    • Обе версии проверяют:
      • наличие расширений Imagick/GD,
      • права доступа к папкам,
      • свободное место на диске.
    • Различия минимальны и связаны с порядком проверок (из-за разной структуры кода).
  9. Логирование
    • Функционал идентичен:
      • JSON-лог и текстовый лог,
      • запись прогресса, ошибок, статистики.
    • Отличия только в порядке вызовов (из-за реорганизации кода).
  10. Целевая аудитория
    • Оригинал рассчитан на опытных пользователей, которые:
      • запускают скрипт из командной строки,
      • настраивают параметры «на лету» через аргументы.
    • Simpli-версия ориентирована на новичков, которым проще:
      • отредактировать настройки в файле,
      • запустить скрипт без аргументов.

Вывод

  • Используйте converter.php, если нужна:
    • гибкость настройки через командную строку,
    • интеграция в автоматизированные процессы (CI/CD, cron).
  • Выбирайте converter-simpli.php, если:
    • хотите минимизировать риск ошибок при настройке,
    • предпочитаете редактировать параметры в одном месте (в коде),
    • запускаете скрипт вручную без сложных аргументов.

Тестирование на больших объёмах:

Ваш надёжный партнёр в мире профессионального ПО
Добавить комментарий