Why your EE site breaks on PHP 8
Hosts are retiring PHP 7 and older PHP 8 releases. PHP 8.2 is now the oldest branch the PHP project still patches, and the October 2026 PHP security alert made the move urgent for many hosts.
The problem is rarely ExpressionEngine itself. Supported EE versions run on PHP 8. What breaks is:
- Old add-ons written for PHP 5 or 7: removed functions like
create_function()andeach(), private magic methods, dynamic properties. - Custom extensions and plugins your previous developer wrote.
- Templates with PHP parsing turned on.
- An EE version that's too old: EE5 and earlier don't support PHP 8.2 at all. EE6 needs 6.4.15 or later, and EE7 needs 7.2.8 or later.
Which PHP version can your EE run?
- EE7 (7.2.8+): PHP 8.2 and 8.3. PHP 8.2 with PHP-FPM is what the EE docs recommend.
- EE6 (6.4.15+): PHP 8.2. Security fixes for EE6 end on 31 December 2026.
- EE5 and older: not compatible with PHP 8.2. The fix is an upgrade to EE7, which the updater can do in one step.
If you're not sure what you have, the version is in the footer of your control panel. Or send us the URL and we'll check for free.
What you get
- A list of every PHP 8 problem we found, and what we did about each.
- Patched or updated add-ons, with replacements suggested where an add-on is abandoned.
- The site tested on the target PHP version on staging, then switched on live.
- The PHP error log checked after go-live, so nothing is left hiding in AJAX calls or the control panel.
For real before-and-after code, see Fixing ExpressionEngine errors on PHP 8.
How it works
- 1
Free check
We look at your EE version, PHP version and add-ons, and send a fixed quote.
- 2
Staging copy
A full copy with its own database and system folder, switched to the target PHP version.
- 3
Find every error
Debugging on, every template, form and control-panel screen loaded, error log read.
- 4
Fix
Patch or update add-ons and custom code; upgrade EE itself if the version is too old.
- 5
You review
You click through staging and approve.
- 6
Go live
PHP switched on live in a quiet window, with a fresh backup, then the error log watched.