Почему PHP 8.5+?
TCPDF-Next требует PHP 8.5+ по замыслу. Это не произвольное ограничение — каждая современная возможность PHP, используемая в библиотеке, напрямую улучшает качество кода, безопасность и опыт разработчика.
Используемые возможности PHP 8.5
| Возможность | Преимущество для TCPDF-Next |
|---|---|
| Readonly classes | Неизменяемые value objects (PageSize, Margin, Color, FontInfo) — исключены ошибки мутации |
| Backed enums | Типобезопасная конфигурация (Orientation::Portrait, BarcodeType::QRCode, SignatureLevel::PAdES_B_LTA) |
| Именованные аргументы | Самодокументирующиеся вызовы API — setSignature(certInfo: $cert, level: SignatureLevel::PAdES_B_B) |
| Union/intersection types | Точные типы параметров по всему API |
| DNF types | Сложные ограничения типов для внутренней валидации |
#[\SensitiveParameter] | Пароли и приватные ключи никогда не появляются в стек-трейсах (Aes256Encryptor, CertificateInfo, TsaClient) |
#[\NoDiscard] | Предупреждения компилятора при игнорировании возвращаемых значений критических методов (FontManager::registerFont(), FormFlattener::flatten()) |
| Property hooks | Чистые паттерны getter/setter без шаблонного кода |
| Pipe operator | Упрощённые внутренние трансформации данных |
| Fibers | Основа для асинхронной генерации PDF в воркерах очередей |
"Но мой сервер работает на PHP 8.1..."
Используйте Docker как изоляционный слой. Ваше приложение может работать на любой версии PHP — TCPDF-Next работает внутри контейнера.
Минимальный Dockerfile
dockerfile
FROM php:8.5-cli
# Install required extensions
RUN apt-get update && apt-get install -y \
libicu-dev libpng-dev libjpeg-dev libwebp-dev \
&& docker-php-ext-configure gd --with-jpeg --with-webp \
&& docker-php-ext-install gd intl
# Install Composer
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
COPY . /app
WORKDIR /app
RUN composer install --no-dev --optimize-autoloaderDocker Compose для команд
yaml
services:
pdf-generator:
build: .
volumes:
- ./output:/app/output
command: php generate-pdf.phpLaravel с Docker
Если ваше Laravel-приложение работает на PHP 8.2, но вам нужен TCPDF-Next, запускайте генерацию PDF как микросервис:
yaml
services:
app:
image: php:8.2-fpm
# Your Laravel app
pdf-service:
build:
context: ./pdf-service
dockerfile: Dockerfile
image: php:8.5-cli
volumes:
- shared-output:/output
volumes:
shared-output:Или используйте систему очередей Laravel для отправки генерации PDF на воркер PHP 8.5.
🐳 Docker for Legacy PHP Environments
Docker — рекомендуемый подход для команд, которые не могут обновить версию PHP в продакшене. Процесс генерации PDF изолирован — он читает входные данные, записывает PDF-файл и завершается. Без общего состояния, без проблем совместимости.
Компромисс
Требуя PHP 8.5+, TCPDF-Next получает:
- Меньшую кодовую базу — Современные возможности заменяют сотни строк обходных решений
- Более сильную типобезопасность — PHPStan Level 10 с нулём ошибок
- Лучшую безопасность —
#[\SensitiveParameter]предотвращает утечку учётных данных в логах - Неизменяемые объекты — Readonly classes устраняют целую категорию ошибок
- Самодокументирующийся код — Enums заменяют магические строки, именованные аргументы заменяют позиционные массивы
Библиотека, которая будет служить вам следующее десятилетие, должна быть построена на возможностях языка следующего десятилетия.