Skip to content
EdgeServers
Blog

Upgrading to PHP 8.3 in production — the migration playbook for Laravel, Symfony, and WordPress

May 26, 2026 · 1 min read · by Sudhanshu K.

PHP 8.3 is the current "boring, fast, reliable" target for most production fleets. Most apps move cleanly from 8.1 or 8.2. A small but sharp set of deprecations is what catches teams out — dynamic properties without #[AllowDynamicProperties], the assert() signature change, and the readonly-amend rules — all of which throw at runtime, not at build time.

This is the staged playbook we run on customer fleets to move them across safely.

The staged rollout

# .github/workflows/php-version-matrix.yml
strategy:
  matrix:
    php-version: ['8.1', '8.2', '8.3']
steps:
  - uses: shivammathur/setup-php@v2
    with: { php-version: ${{ matrix.php-version }} }
  - run: composer install --prefer-dist
  - run: vendor/bin/phpunit
  - run: vendor/bin/phpstan analyse --error-format=github

CI runs against three versions simultaneously for at least two weeks before the upgrade. PHPStan at level 8 + a deprecation-error reporting layer surfaces 90% of the breakage before traffic ever sees it.

The full write-up covers:

  • The 8.1 → 8.3 deprecation list ranked by frequency in real codebases
  • Rector — the auto-fix tool that does most of the mechanical work
  • The error_reporting = E_ALL + log-then-strict pattern for catching deprecations in production
  • Framework-specific gotchas (Laravel queue serializer, Symfony 6.4 LTS, WordPress core compat)
  • The blue/green deploy pattern for the actual cutover
  • Roll-back plan: keep an 8.2 container in the registry tagged previous

We use this playbook on every PHP fleet upgrade we run.

Full article available

Read the full article