PHP 8.3 end of life on 31 Dec 2027: the upgrade path to PHP 8.5

PHP 8.3 security support ends 31 Dec 2027. Move to PHP 8.5, supported to 2029, after checking frameworks, extensions and hosting.

Read time
18 min
Word count
2.2K
Sections
12
FAQs
8
Share
Developer ticks a frameworks, extensions and hosting checklist by a laptop and tablet, with PHP, Laravel and Symfony logos
On this page · 12 sections
  1. What stops on 31 December 2027, and what does not
  2. PHP support dates side by side
  3. Pick a target: PHP 8.4, 8.5 or 8.6
  4. Framework and CMS compatibility
  5. Hosting: who patches your PHP after 2027
  6. Breaking changes from PHP 8.3 to 8.4
  7. Breaking changes from PHP 8.4 to 8.5
  8. The upgrade runbook
  9. Worked example: a 20-site agency estate
  10. India and EU notes
  11. How eCorpIT can help
  12. References

Summary. PHP 8.3 gets its last security fixes on 31 December 2027, and its bug-fix phase already ended on 31 December 2025. For most teams the target is PHP 8.5: released on 20 November 2025, it has security support until 31 December 2029. PHP 8.4, supported to 31 December 2028, is the fallback when a dependency blocks 8.5. PHP 8.6 is not ready: RC5 shipped on 5 November 2026, general availability is planned for 19 November 2026, and php.net has not published its support dates. October 2026 showed what is at stake: PHP 8.5.12, 8.4.27, 8.3.36 and 8.2.35 fixed two unauthenticated remote code execution flaws, CVE-2026-109618 and CVE-2026-109619, both scored 9.2 under CVSS v4.0. From 2028 the PHP project will not ship a fix like that for 8.3. Frameworks point the same way. Laravel 13 supports PHP 8.3 to 8.5, but the branch where Laravel 14 is being built requires 8.4, and every Symfony 8 release needs 8.4. WordPress supports PHP 8.5 from version 6.9. The main exception is Ubuntu 24.04, whose php8.3 package sits in Main and gets Canonical's security patches until May 2029.

About this article. This guide is for developers, tech leads, agencies and hosting owners who run PHP 8.3. On 7 November 2026 we checked every date, version and requirement against php.net's supported versions page, release announcements and migration guides, PHP's GitHub security advisories, the Laravel, Symfony and WordPress support pages, Ubuntu's package archive and release cycle page, and Microsoft Learn. For the regional notes we read the DPDP Rules, 2025 (G.S.R. 846(E), dated 13 November 2025) and Article 32 of the GDPR as published on EUR-Lex; those notes are not legal advice. PHP 8.6 was a release candidate on the check date, and no vendor paid for inclusion. Researched with AI assistance and reviewed by our editorial team.

This guide covers the runtime decision. For the framework calendar, read our Laravel 12 end-of-life guide, and for patching the October flaws, our PHP2Shell fix guide.

What stops on 31 December 2027, and what does not

Each PHP branch gets two years of active support, with bugs and security issues fixed in regular point releases, then two years of critical security fixes only, released as needed, which can mean none. After four years it reaches end of life, and php.net advises users to upgrade quickly because they may be exposed to unpatched vulnerabilities. Since a 2024 process change, end dates fall on 31 December.

What stops. New 8.3.x releases from the PHP project. The latest on 7 November 2026 is 8.3.36, a security release.

What does not stop. Your applications. Nothing switches off on 1 January 2028, and code keeps running on whatever PHP build the server has.

What becomes your problem. Every vulnerability disclosed after that date. In October 2026, given the severity of the two RCE flaws, PHP's security team did publish minimal source backports for the unsupported 7.4, 8.0 and 8.1 branches, as git branches rather than releases. That was a one-off, so do not plan on it.

Who might still patch it. Linux distributions and commercial vendors, for their own packages; see the hosting section.

PHP support dates side by side

The dates below come from php.net's supported versions page and its release branches feed, with the latest releases as listed on 7 November 2026. The PHP 8.6 row uses the project's published timetable.

Branch Initial release Active support until Security support until Latest release, 7 Nov 2026 Status on 1 Jan 2028
8.2 8 Dec 2022 31 Dec 2024 31 Dec 2026 8.2.35 End of life
8.3 23 Nov 2023 31 Dec 2025 31 Dec 2027 8.3.36 End of life
8.4 21 Nov 2024 31 Dec 2026 31 Dec 2028 8.4.27 Security fixes only
8.5 20 Nov 2025 31 Dec 2027 31 Dec 2029 8.5.12 Security fixes only
8.6 GA planned 19 Nov 2026 Not yet published Not yet published 8.6.0 RC5 Active (expected)

Two points are easy to miss. PHP 8.5 leaves active support on the day 8.3 reaches end of life, so from January 2028 it gets security fixes only. And if PHP 8.6 follows the same pattern, its security support would run to 31 December 2030; that is our projection, not a php.net date.

PHP ships a new branch each year in late November or early December: 8.2 on 8 December 2022, 8.3 on 23 November 2023, 8.4 on 21 November 2024 and 8.5 on 20 November 2025. If that holds, another branch will arrive just before 8.3 ends, so pick targets by security date, not by newest version.

Pick a target: PHP 8.4, 8.5 or 8.6

Target Security support until Pick it if Watch out for
PHP 8.4 31 Dec 2028 A critical extension or package does not support 8.5 yet, or you want the larger hop done first Another upgrade due within about a year
PHP 8.5 31 Dec 2029 You want one planned move that lasts two years; Laravel 12 and 13 and WordPress 6.9 and later list it, and Symfony 8 needs at least 8.4 Stricter casting warnings, PDO constant changes and new deprecations
PHP 8.6 Not yet published Greenfield work, or a stack whose framework, extensions and host already list 8.6 Very new; wait for framework and hosting support

For most production estates we recommend PHP 8.5, tested through 8.4 in CI: fix the 8.4 step first, while 8.3 still gets patches, then take the smaller 8.5 step. Treat 8.6 as a target once your framework lists it.

Framework and CMS compatibility

Sources: Laravel's support policy and master branch, symfony.com's release pages, which give minimum PHP versions only, and WordPress's compatibility table, updated on 4 November 2026.

Platform Version PHP range (as published) Support ends
Laravel 12 8.2 to 8.5 Security fixes 24 Feb 2027
Laravel 13 8.3 to 8.5 Bug fixes Q3 2027, security 17 Mar 2028
Laravel 14 (unreleased) 8.4 or later on the master branch Not announced
Symfony 6.4 LTS 8.1.0 or higher Bug fixes Nov 2026, security Nov 2027
Symfony 7.4 LTS 8.2.0 or higher Bug fixes Nov 2028, security Nov 2029
Symfony 8.1 8.4.0 or higher Jan 2027
Symfony 8.2 (beta, due Nov 2026) 8.4.0 or higher Jul 2027
WordPress 6.9 7.2 to 8.5 No end date published
WordPress 7.0 and 7.1 7.4 to 8.5 No end date published

Laravel. Laravel 13 runs on PHP 8.5 today, and its security window ends about 11 weeks after PHP 8.3's: 17 March 2028 against 31 December 2027. The stronger signal is the master branch, which requires PHP 8.4 or later. An app still on 8.3 when Laravel 14 ships cannot take it.

Symfony. Symfony 6.4 LTS stops getting bug fixes in November 2026 and security fixes in November 2027, a month before PHP 8.3. An estate on Symfony 6.4 and PHP 8.3 therefore hits two deadlines within weeks. Symfony 8 requires PHP 8.4, so PHP 8.3 cannot run it at all, and Symfony 8.2 was still in beta on 7 November. The practical route is Symfony 7.4 LTS, supported to November 2029, on PHP 8.4 or 8.5, after checking your bundles' own test matrices.

WordPress. Core supports PHP 8.5 from WordPress 6.9, and WordPress 7.0 dropped PHP 7.2 and 7.3. WordPress.org recommends PHP 8.3 or newer with MariaDB 10.11 or MySQL 8.0 or newer, and warns that the end-of-life versions it still runs on can leave a site open to security flaws. WordPress 7.2, the last major release of 2026, is planned for 10 December 2026, so watch whether it adds PHP 8.6 to the table. Plugins and themes are the usual constraint, so test the full plugin set on staging.

Hosting: who patches your PHP after 2027

Where PHP comes from decides whether 1 January 2028 changes anything. Default versions are from Ubuntu's package archive and dates from its release cycle page.

Ubuntu release Default PHP Standard security maintenance ends What it means for PHP
22.04 LTS 8.1 May 2027 PHP 8.1 passed upstream end of life on 31 Dec 2025; Canonical's standard patches stop in May 2027
24.04 LTS 8.3 May 2029 php8.3 is in Main, so Canonical keeps patching it after php.net stops
26.04 LTS 8.5 May 2031 The default already matches the recommended target

Ubuntu 24.04. Canonical says LTS releases get five years of standard security maintenance, with CVE patches for packages in the Main repository, and php8.3 sits in Main. Canonical backports fixes into 8.3.6 rather than shipping php.net's releases: the noble-updates build is 8.3.6-0ubuntu0.24.04.13, and its changelog shows the October RCE fixes landing on 19 October 2026. Three problems remain. Scanners that compare version strings with php.net may flag 8.3.6. Laravel 14 and Symfony 8 will not run on 8.3, whoever patches it. And the coverage applies to the distribution's package, not to third-party PPA builds. Ubuntu Pro's Expanded Security Maintenance runs to May 2034. Our Ubuntu 24.04, 26.04 and RHEL 10 server comparison helps pick the next base.

Managed platforms. Azure App Service follows each language community's support timeline. After end of support, apps keep running, but App Service provides no security patches or support for that runtime and will not support the app until it moves to a supported version; it sends reminder notifications to subscription owners. Check each host's policy rather than assuming it matches Azure's.

Shared hosting and control panels. On cPanel or Plesk, PHP is often a per-site dropdown: quick to switch, easy to break. Ask your host which builds it offers, who patches them, and whether IMAP, OCI8, PDO_OCI and PSpell are available for PHP 8.4 and later.

Containers. Pin a supported PHP minor version in the base image, rebuild on every patch release, and fail builds whose PHP falls out of support.

Breaking changes from PHP 8.3 to 8.4

This hop is the one most likely to touch application code. The PHP manual also warns that any new function, class, interface, enum or constant can cause a redeclaration error in code that already uses the name.

Change in 8.4 Type What to do
Implicitly nullable parameters (T $x = null) deprecated Deprecation Change to ?T $x = null or a union type with null; often the biggest source of warnings
IMAP, OCI8, PDO_OCI and PSpell moved to PECL Removed from core Install from PECL or replace before upgrading servers; IMAP often sits in helpdesk and mail-polling code
exit() and die() behave like functions; invalid types throw TypeError Behaviour Check scripts that pass arrays or objects to exit()
E_STRICT level removed, constant deprecated Removal Remove it from error_reporting masks
DBA, ODBC and SOAP resources replaced by objects Behaviour Replace is_resource() checks with false or null checks
JIT defaults now opcache.jit=disable and opcache.jit_buffer_size=64M Configuration If you enabled JIT through buffer size alone, set opcache.jit explicitly
MySQL server wait timeout error code changes from 2006 to 4031 on MySQL 8.0.24 and above Behaviour Update reconnect logic that matches error codes
Bundled PCRE2 10.44 treats {,3} as a quantifier Behaviour Review regular expressions that used it as text
Default escape argument for fputcsv(), fgetcsv() and str_getcsv() deprecated Deprecation Pass escape explicitly
trigger_error() with E_USER_ERROR deprecated Deprecation Throw an exception or call exit()
mysqli_ping(), mysqli_kill() and mysqli_refresh() deprecated Deprecation Use SQL KILL or FLUSH; review reconnect code
Changing session.sid_length or session.sid_bits_per_character deprecated Deprecation Accept the default 32-character hexadecimal session IDs
GMP class is final Behaviour Remove subclasses of GMP

Breaking changes from PHP 8.4 to 8.5

The 8.5 hop is smaller, but several items touch configuration files rather than code, so they surface at deploy time.

Change in 8.5 Type What to do
disable_classes INI setting removed Removal Delete it from php.ini and pool configs, and replace the hardening it gave you
OPcache always built in and loaded; zend_extension=opcache.so emits a warning Configuration Remove the directive; opcache.enable is still honoured
Warning when casting floats, or float-like strings, that int cannot represent; casting NAN warns Stricter Fix numeric parsing of user input and imports
Destructuring non-array values (other than null) warns Stricter Guard inputs before list-style assignment
Values of PDO::FETCH_GROUP, FETCH_UNIQUE, FETCH_CLASSTYPE, FETCH_PROPS_LATE and FETCH_SERIALIZE changed Behaviour Never hard-code the numeric values
Driver-specific PDO constants deprecated, for example PDO::MYSQL_ATTR_SSL_CA Deprecation Use Pdo\Mysql::ATTR_SSL_CA and equivalents in database config
null as an array offset or in array_key_exists() deprecated Deprecation Use an empty string explicitly
Casts (boolean), (integer), (double) and (binary) deprecated Deprecation Use (bool), (int), (float) and (string)
Backtick operator deprecated Deprecation Call shell_exec()
curl_close(), finfo_close(), imagedestroy() and xml_parser_free() deprecated Deprecation Remove the calls; objects free themselves
$http_response_header deprecated Deprecation Call http_get_last_response_headers()
Intl extension requires ICU 57.1 or later Build Check the ICU version on older base images
Deriving $_SERVER['argv'] from the query string in non-CLI SAPIs deprecated Deprecation Set register_argc_argv=0 and use $_GET

PHP 8.5 also soft-deprecates the __sleep() and __wakeup() magic methods; move classes to __serialize() and __unserialize() as you touch them.

The upgrade runbook


            # 1. Inventory: version, extensions and loaded ini files per environment
php -v
php -m
php --ini

# 2. Dependency readiness for the target version
composer check-platform-reqs
composer why-not php 8.5
composer audit

# 3. Run the suite with every deprecation visible
php -d error_reporting=E_ALL -d display_errors=1 vendor/bin/phpunit
          
  1. Patch now. Be on 8.3.36 or your distribution's patched build, which carry the October 2026 fixes. On Windows, use the 8.3.36-1 rebuild from 26 October, which bundles a fixed Brotli library. Until the next regular release, php.net also suggests setting session.upload_progress.enabled=0 to close an unlikely remote code execution path.
  1. Inventory every environment. Record the PHP version, SAPI (PHP-FPM, Apache mod_php or LiteSpeed), extensions, php.ini overrides, OS image and who supplies the build. Flag any use of IMAP, OCI8, PDO_OCI or PSpell.
  1. Set the target in Composer. Update require.php and any config.platform.php pin, then use composer why-not php 8.5 to list blocking packages.
  1. Add a CI matrix. Test on 8.3, 8.4 and 8.5. Add 8.6 as an allowed failure once it is out.
  1. Fix the 8.4 hop first. Clear implicitly nullable parameters, CSV escape arguments and removed-extension calls while production stays on a patched 8.3.
  1. Diff the configuration. Remove disable_classes, zend_extension=opcache.so and E_STRICT masks; set opcache.jit explicitly if you use JIT; review session settings.
  1. Stage with production-like data. Run queues, cron jobs and imports with error_reporting=E_ALL and read the deprecation log.
  1. Roll out gradually. Move one PHP-FPM pool or host at a time and keep the 8.3 build installed for rollback until error rates settle.
  1. Close the loop. Remove 8.3 packages, update the asset register and diary the next date: 31 December 2029 for PHP 8.5.

Worked example: a 20-site agency estate

Assume an agency maintains 20 sites: 12 WordPress, 5 Laravel 13 and 3 Symfony 6.4. As illustrative assumptions, a WordPress site needs half an engineer-day for plugin checks and staging, a Laravel 13 app needs 2 days because the framework already supports PHP 8.5, and a Symfony 6.4 app needs 5 days because it must also move to Symfony 7.4 LTS.

Total effort. (12 × 0.5) + (5 × 2) + (3 × 5) = 6 + 10 + 15 = 31 engineer-days.

The cost of waiting. Started in January 2027, with about 50 working weeks to 31 December, that is 31 ÷ 50 ≈ 0.6 engineer-days a week. Started with 12 weeks to go, it is 31 ÷ 12 ≈ 2.6 engineer-days a week, landing during year-end change freezes.

Order of work. Do the three Symfony apps first: Symfony 6.4's bug fixes end in November 2026 and its security fixes in November 2027, a month before PHP 8.3's. Then the Laravel apps, then batch the WordPress sites by shared plugin sets.

India and EU notes

India. Rule 6 of the DPDP Rules, 2025 requires reasonable security safeguards, and it comes into force eighteen months after the rules' publication on 13 November 2025, which computes to 13 May 2027. That is more than seven months before PHP 8.3 reaches end of life. An unsupported runtime under an app that handles personal data would be hard to defend as a reasonable safeguard; our DPDP Rules checklist covers the wider controls.

EU. GDPR Article 32 asks for security appropriate to the risk, taking account of the state of the art, without naming software versions. A dated runtime plan also answers customer questionnaires that ask whether your stack is supported.

How eCorpIT can help

eCorpIT is a Gurugram-based technology organisation, founded in 2021, assessed at CMMI Level 5 and MSME certified, with senior-led engineering teams working across AWS, Microsoft and Google platforms. Our PHP development team runs PHP estate inventories, PHP 8.4 and 8.5 runtime moves with CI version matrices, Laravel and Symfony upgrades, WordPress plugin compatibility testing and hosting migrations. Talk to us at /contact-us/.

Last updated: 7 November 2026.

References

  1. Supported Versions — PHP
  1. Release branches feed (JSON) — PHP
  1. PHP 8.6.0 RC5 available for testing, 5 November 2026 — PHP
  1. Security advisory: critical remote code execution vulnerabilities, update now, 21 October 2026 — PHP
  1. RCE via OOM corruption, CVE-2026-109618 (GHSA-w8hw-w9fx-j79w) — PHP on GitHub
  1. RCE via stale global state, CVE-2026-109619 (GHSA-6wmf-4rv5-p3rp) — PHP on GitHub
  1. Release notes and support policy, Laravel 13.x — Laravel
  1. laravel/framework composer.json, master branch — GitHub
  1. Symfony releases data (JSON) — Symfony
  1. PHP Compatibility and WordPress Versions, updated 4 November 2026 — WordPress Core Handbook
  1. Ubuntu release cycle — Canonical
  1. PHP RFC: Release cycle update — PHP Wiki
  1. PHP 8.3.36 release announcement — PHP
  1. PHP 8.6 preparation tasks and timetable — PHP Wiki
  1. Symfony releases — Symfony
  1. Symfony 6.4 release — Symfony
  1. Symfony 7.4 release — Symfony
  1. Requirements — WordPress.org
  1. Roadmap — WordPress.org
  1. Package search results for php in all suites — Ubuntu Packages
  1. Package php8.3 in noble-updates — Ubuntu Packages
  1. php8.3 8.3.6-0ubuntu0.24.04.13 changelog — Ubuntu
  1. Language runtime support policy for Azure App Service — Microsoft Learn
  1. Migrating from PHP 8.3.x to PHP 8.4.x: backward incompatible changes — PHP Manual
  1. Migrating from PHP 8.3.x to PHP 8.4.x: deprecated features — PHP Manual
  1. Migrating from PHP 8.3.x to PHP 8.4.x: removed extensions — PHP Manual
  1. Migrating from PHP 8.4.x to PHP 8.5.x: backward incompatible changes — PHP Manual
  1. Migrating from PHP 8.4.x to PHP 8.5.x: deprecated features — PHP Manual
  1. Updated PHP Windows builds for Brotli security fix, 26 October 2026 — PHP
  1. Informational advisory: session upload progress, 23 October 2026 — PHP
  1. Digital Personal Data Protection Rules, 2025, G.S.R. 846(E), 13 November 2025 — Ministry of Electronics and Information Technology
  1. Regulation (EU) 2016/679 (General Data Protection Regulation), Article 32 — EUR-Lex

Frequently asked

Quick answers.

01 When does PHP 8.3 reach end of life?
PHP 8.3 gets security fixes until 31 December 2027, according to php.net's supported versions page. Its active support, which covered ordinary bug fixes, ended on 31 December 2025. After the end-of-life date the PHP project publishes no more 8.3 releases, so later flaws stay unpatched unless your distribution or vendor backports fixes.
02 Is PHP 8.3 still safe to use in 2027?
Yes, if you stay on the latest patch release: 8.3.36 or later on 7 November 2026, which fixed two critical remote code execution flaws in October 2026, or your distribution's patched build. PHP 8.3 is already in its security-only phase, so plan the move during 2027 rather than running it after 31 December.
03 Should I upgrade from PHP 8.3 to 8.4 or straight to 8.5?
For most applications, go to PHP 8.5, which has security support until 31 December 2029. Test the 8.4 step in CI first, because it is the hop most likely to touch code: implicitly nullable parameters are deprecated and IMAP, OCI8, PDO_OCI and PSpell moved to PECL. Stop at 8.4 only if a key dependency blocks 8.5.
04 Is PHP 8.6 ready for production?
Not on 7 November 2026. PHP 8.6.0 RC5 shipped on 5 November with a php.net warning against production use, and general availability is planned for 19 November 2026. Its support dates are not yet published. Adopt it once your framework, extensions and hosting provider all list support for it.
05 Does WordPress support PHP 8.5?
Yes. WordPress core's compatibility table lists PHP 8.5 support from WordPress 6.9, and WordPress 7.0 and 7.1 support PHP 7.4 to 8.5. WordPress.org recommends PHP 8.3 or newer. Plugins and themes are the usual blockers, so test the complete plugin set on a staging copy before switching the live site.
06 Which Laravel and Symfony versions work with PHP 8.5?
Laravel 12 supports PHP 8.2 to 8.5 and Laravel 13 supports 8.3 to 8.5. Symfony publishes minimum versions only: 7.4 LTS needs PHP 8.2 or higher, and Symfony 8.1 needs 8.4 or higher. Laravel's master branch, where Laravel 14 is being built, requires PHP 8.4, so PHP 8.3 cannot run it.
07 My server runs Ubuntu 24.04 with PHP 8.3. Must I upgrade by December 2027?
Not for patches alone. Ubuntu 24.04 ships php8.3 in its Main repository, which Canonical security-maintains until May 2029, and its build already carries the October 2026 fixes. You will still need PHP 8.4 or later for Laravel 14 and Symfony 8, and scanners may flag the 8.3.6 version string.
08 What breaks most often when moving from PHP 8.3 to 8.5?
Implicitly nullable parameter types, deprecated in 8.4, are the change most likely to flood older code with warnings. Removed extensions such as IMAP break mail features, zend_extension=opcache.so now triggers a startup warning, and disable_classes no longer applies. PHP 8.5 also warns on lossy float-to-int casts and deprecates driver-specific PDO constants.

About the author

Manu Shukla

Founder & Director

Founder of eCorpIT. Hands-on engineer leading senior-only delivery for AI apps, custom software, and cloud systems for global clients.

Subscribe

One engineering note a week. No fluff, no spam.

Senior-architect playbooks on AI agents, mobile apps, cloud, security, data, and marketing — delivered every Wednesday.

Past the reading

Read enough. Let's build something.

A senior architect responds in 24 working hours with scope, indicative cost, and a timeline. NDA before any technical conversation.

Loading search…

Browse all guides