Tutorial

PHP 8.2 end of life: your migration checklist

Development11 min read8 steps

On December 31, 2026, PHP 8.2 reaches its official end of life: after that date, no security patches will be issued by the PHP team. For agencies managing dozens of client sites, this deadline is not a minor technical note — it is an operational risk window that is closing. Planning the migration to PHP 8.3 or 8.4 ahead of time keeps you in control of the schedule rather than reacting under pressure.

Contents· What PHP 8.2 end of life means in practice1/11
  1. 01What PHP 8.2 end of life means in practice
  2. 02Concrete risks after December 31, 2026
  3. 03Inventorying your stack — mapping PHP 8.2 sites
  4. 04PHP 8.2, 8.3 and 8.4 — lifecycle, EOL and key features
  5. 05Testing compatibility before migrating
  6. 06Migration checklist to PHP 8.3 or 8.4
  7. 07Frameworks and CMS — PHP 8.2 drop dates
  8. 08Automating version monitoring across your agency stack
  9. 09Troubleshooting — 4 common migration errors
  10. 10Planning ahead to manage your client stack smoothly
  11. 11ServOrbit VPS with configurable PHP-FPM

What PHP 8.2 end of life means in practice

Every PHP version follows a two-phase lifecycle: two years of active support (bug and security fixes), then two years of security-only support — four years total per version. PHP 8.2, released in November 2022, ended active support on December 31, 2024. Since January 1, 2025, only critical security patches have been published. On December 31, 2026, even that coverage stops. Vulnerabilities discovered after that date in the PHP 8.2 engine will receive no official patch. Your servers will keep running code, but with no safety net. CVEs published after the EOL date will remain exploitable indefinitely on unmigrated installations. This is the difference between a maintained runtime and an abandoned one — and the difference is invisible in your logs until an attack occurs.

Concrete risks after December 31, 2026

  • Unpatched zero-day vulnerabilities — any vulnerability discovered in PHP 8.2 after EOL will remain exploitable indefinitely; attackers track these deadlines and wait.
  • Growing framework incompatibility — Laravel 13 (Q1 2026) requires PHP 8.3 as a minimum and officially drops PHP 8.2; projects that have not migrated will be unable to upgrade the framework.
  • Composer package pressure — package maintainers progressively stop declaring PHP 8.2 compatibility in their composer.json, causing blocks during dependency updates.
  • Removal by hosting providers — some managed panels and hosting providers remove PHP 8.2 from active environments, forcing an unplanned emergency migration.
  • Compliance audit risk — ISO 27001, PCI-DSS and SOC 2 frameworks flag the use of EOL runtimes as an unacceptable gap; an unmaintained version can block a certification.
  • Loss of WordPress support — WordPress recommends PHP 8.3 as the minimum version in 2026; premium plugins progressively condition their support on PHP 8.3 or higher.
  • Progressive behavioral divergence — PHP 8.3 and 8.4 correct internal behaviors and improve error messages; staying on 8.2 means missing these corrections and widening the gap with your team's development environments.

Inventorying your stack — mapping PHP 8.2 sites

The first challenge for an agency is not technical, it is cartographic. Before any migration, you need to know exactly how many sites are running on PHP 8.2 and under what server configuration. An incomplete inventory leads to forgotten sites that remain exposed after the EOL date. On each VPS, run php -v per virtual host or consult a temporary phpinfo.php file — delete it immediately after use. On cPanel or Plesk servers, the admin interface exposes the PHP version per domain. List each site in a spreadsheet with the following columns: domain, active PHP version, CMS or framework, CMS version, date of last dependency update, and criticality level (e-commerce, brochure, intranet). This map is the prerequisite for any planning: without it, you cannot prioritize or estimate the migration workload.

PHP 8.2, 8.3 and 8.4 — lifecycle, EOL and key features

Scroll the table

CriteriaPHP 8.2PHP 8.3PHP 8.4
Release dateNovember 2022November 2023November 21, 2024
Active support endDecember 31, 2024December 31, 2025December 31, 2026
Security support end (EOL)December 31, 2026December 31, 2027December 31, 2028
Readonly classesYesYesYes
Typed class constantsYesYesYes
Property hooksNoNoYes (major feature)
Asymmetric visibilityNoNoYes
json_validate()YesYesYes
Laravel 12 compatibilityYesYesYes
Laravel 13 compatibilityNoYesYes
Symfony 7.x compatibilityYesYesYes
Symfony 8.x compatibilityNoNoYes (8.4 required)

Testing compatibility before migrating

Migrating without prior testing is the primary cause of production incidents. Two complementary tools cover the bulk of static analysis. PHPCompatibility is a ruleset for PHP_CodeSniffer: it scans your source code and reports removed function calls, deprecated parameters and behavioral changes between versions. Install it via Composer (composer require --dev phpcompatibility/php-compatibility) and run it with the target --runtime-version=8.3. PHPStan, in turn, performs static type analysis: configured at level 5 or above, it detects dynamic properties (deprecated since PHP 8.2, fatal in 8.4), type incompatibilities and incorrect method signatures. The recommended approach is to run PHPStan first on the current codebase to establish a baseline, then switch the target PHP version to 8.3 or 8.4 in your phpstan.neon to identify gaps. These two static passes do not replace functional tests, but they let you prioritize files to fix before even opening a staging environment.

Migration checklist to PHP 8.3 or 8.4

  1. Map your stack and establish the migration order

    List all sites running PHP 8.2 with their CMS, framework and criticality level. Prioritize e-commerce sites and sensitive applications first; static brochure sites can be handled last.

  2. Run static analysis with PHPCompatibility and PHPStan

    Run phpcs --standard=PHPCompatibility --runtime-version=8.3 on the source directory. Fix removed function calls and undeclared dynamic properties before moving to the next step.

  3. Update Composer dependencies in an isolated environment

    In a staging environment with PHP 8.3 or 8.4 active, run composer update and resolve version conflicts. Verify that each critical package declares compatibility with the target PHP version in its composer.json.

  4. Validate with the existing test suite

    Run PHPUnit, Pest or end-to-end tests against the target PHP version. If the project lacks automated tests, document the critical paths tested manually (authentication, cart, forms, webhooks).

  5. Update the CMS or framework if needed

    WordPress: verify each plugin's compatibility with PHP 8.3. Laravel: if the project is still on Laravel 11, consider upgrading to Laravel 12 at the same time as the PHP migration. Symfony: Symfony 7.4 LTS is compatible with PHP 8.2 through 8.4 without changing the framework.

  6. Switch the PHP version in production

    On a VPS with PHP-FPM, update the virtual host nginx pool to point to the php8.3-fpm.sock or php8.4-fpm.sock socket. Reload nginx and PHP-FPM. On a managed host, change the version via the control panel or CLI.

  7. Monitor error logs for 48 hours

    Enable PHP logging (log_errors = On, error_log = /var/log/php/error.log) and watch for notices, warnings and fatal errors for at least two business days after the switch.

  8. Update the inventory and notify the client

    Update your mapping spreadsheet with the new PHP version and migration date. Send a closing note to the client confirming the upgrade — this traceability is useful during compliance audits.

On a VPS, PHP-FPM allows you to run multiple versions in parallel without conflict: each nginx virtual host points to a separate FPM socket (php8.2-fpm.sock, php8.3-fpm.sock, php8.4-fpm.sock). This architecture lets you migrate site by site, keeping projects not yet tested on PHP 8.2 while validated projects already run on 8.3 or 8.4. Typical nginx configuration: fastcgi_pass unix:/run/php/php8.3-fpm.sock;. Start with the least critical sites to refine your process and verify that your deployment scripts correctly handle PHP-FPM reload.

Frameworks and CMS — PHP 8.2 drop dates

Understanding your frameworks' schedules is essential for anticipating migration constraints. Laravel 12, released on February 24, 2025, supports PHP 8.2 to 8.5 and receives security fixes until February 24, 2027 — no urgency to upgrade the framework version. However, Laravel 13 (released Q1 2026) requires PHP 8.3 as a minimum: any application wishing to migrate to Laravel 13 must first move to PHP 8.3. Symfony 7.x (all versions from 7.0 to 7.4) requires PHP 8.2 minimum; the LTS version Symfony 7.4, released in November 2025, is supported until November 2029 — it is compatible with PHP 8.3 and 8.4. Symfony 8.x requires PHP 8.4 minimum. WordPress recommends PHP 8.3 as the minimum version in 2026, and premium plugins progressively condition their support on PHP 8.3 or higher. These milestones should appear in your migration plan: a framework constraint can trigger a PHP upgrade earlier than expected.

Automating version monitoring across your agency stack

A manual inventory ages quickly: clients add plugins, change deployment providers, or install new applications without notification. Automating version monitoring lets you stay informed without daily effort. Several complementary approaches exist. A simple cron script can query php -v over SSH on each server and write the result to a central report file — a tool like Ansible or Fabric allows parallelizing this collection across dozens of hosts. Server monitoring tools (Netdata, Munin, or specialized agents) expose the PHP version in their metrics and can trigger alerts if an unauthorized version appears. For stacks hosted on ServOrbit VPS instances, a per-VPS inventory endpoint lets you query the active PHP version on each FPM pool from a centralized dashboard. The goal is that discovering a site still on PHP 8.2 after December 31, 2026 triggers an automatic alert — not an annual audit.

Troubleshooting — 4 common migration errors

PHP 8.2 → 8.3/8.4 migrations follow recurring failure patterns. First, dynamic properties: since PHP 8.2, adding an undeclared property to a class is deprecated; in PHP 8.4, it is a fatal error. The symptom is a Creation of dynamic property Warning followed by unexpected behavior. The fix: declare all properties in the class or add the #[\AllowDynamicProperties] attribute for legacy classes. Second, missing PECL extensions: PHP 8.3 and 8.4 do not compile the same extensions by default depending on the distribution; extensions like imagick, redis or swoole must be explicitly reinstalled for the new version. Check with php8.3 -m | grep redis. Third, Composer version conflicts: a package declaring "php": "^8.2" may raise an incompatibility with another package declaring "php": "^8.3" if your composer.lock has not been regenerated — always rerun composer update from scratch in the staging environment. Fourth, deprecated ini directives: some directives like mbstring.func_overload have been removed; an uncleaned php.ini can produce warnings at PHP-FPM startup and mask real application errors.

Planning ahead to manage your client stack smoothly

For an agency managing dozens of sites, the PHP migration is a multi-site project to pilot several months in advance. Establish a plan by decreasing priority: e-commerce sites and critical management applications first, brochure sites last. Communicate to your clients the risks of staying on PHP 8.2 after December 31, 2026 — a dated memo explaining the security and compliance implications is usually enough to unlock the agreement and budget needed. Integrate PHP version upgrades into your annual maintenance contracts: a dedicated line avoids renegotiating each migration. For projects using Docker from the start, the migration reduces to changing a base image in the Dockerfile and rerunning tests — a half-day of work rather than a server intervention.

ServOrbit VPS with configurable PHP-FPM

On a ServOrbit VPS, multiple PHP-FPM versions coexist on the same machine and each virtual host points to the version of its choice. Upgrading is done by modifying a single line of nginx configuration and reloading PHP-FPM — no server restart, no interruption to other hosted sites. For agency stacks, a dedicated VPS per client or a shared VPS with PHP-FPM isolation per pool provides the flexibility to migrate site by site according to your schedule, without depending on a managed hosting provider's timeline. Centralized FPM pool management from the ServOrbit panel lets you see at a glance which PHP version is active on each domain — a prerequisite for keeping your inventory current and anticipating the next lifecycle deadlines.

Manage your client site portfolio from a single platform

ServOrbit provides VPS environments built for agencies: multi-site deployment, centralized PHP version management, and infrastructure designed for planned migrations.

Need help?

Browse our help center and FAQ, or reach our team — callback, WhatsApp or email. Support in French, English and Arabic.

Message us on WhatsAppopens in a new tab