Le contexte
En migrant un projet vers PHP 8.4, plusieurs choses qui passaient en local ont explosé au déploiement sur mon VPS Ubuntu.
Bug 1 — Paramètres nullable implicites
PHP 8.4 déprécie les nullables implicites :
// Deprecated sur PHP 8.4
public function toHtml(string $content = null): string
// Correct
public function toHtml(?string $content = null): string
Rector automatise la reprise de toute la base de code :
vendor/bin/rector process src --dry-run
Bug 2 — Datetime et fuseau horaire
Sur le VPS, les dates ressortaient avec un fuseau différent du local. La règle qui sauve : stocker en UTC, convertir à l'affichage.
# config/packages/doctrine.yaml
doctrine:
dbal:
server_version: '8.4'
{{ post.publishedAt|date('d M Y', 'Europe/Paris') }}
Bug 3 — Le cache prod révèle tout
APP_ENV=dev masque des erreurs de compilation de conteneur. Toujours tester en prod avant de pousser :
php bin/console cache:clear --env=prod
php bin/console cache:warmup --env=prod
composer dump-autoload --optimize --no-dev
C'est le warmup prod qui a fait remonter un service non instanciable que dev tolérait via lazy-loading.
Ce que je retiens
- Toujours tester avec
APP_ENV=prodavant de déployer. - Rector est indispensable pour les montées de version PHP.
- Fuseau horaire : stocker en UTC, convertir à l'affichage. Toujours.