The short answer: most old sites need changes rather than a rewrite. PHP 8 removed some old functions and got much stricter about sloppy code, so things that used to fail quietly now stop the page. A sensible upgrade runs a copy on PHP 8, fixes what the error log shows, tests every page, then switches over.
These are the ones we meet again and again moving old sites, including old content management systems like Perch and ExpressionEngine:
count()Counting something that isn't a list used to give 0 or 1. Now it stops the page with an error.each()Removed. Old loops written with it simply stop working.create_function()Removed. Common in older plugins and add-ons.mysql_*The original database functions, gone since PHP 7. Very old sites still use them.split(), ereg()Old pattern functions, also gone since PHP 7."abc" == 0Comparisons between text and numbers changed, so some if checks quietly give a different answer.null into built-insPassing an empty value where text is expected now raises warnings that fill the logs.The quiet ones are the worry. A removed function stops the page, so you find it straight away. A comparison that now gives a different answer can sit in a pricing or permissions check and nobody notices for weeks.
The removed functions find themselves. It's the comparisons that quietly change answers you need to go looking for.
It's a small job if the site is mostly a well-known CMS or framework with a supported version, and the custom code is light. It gets bigger with every version you've skipped, every abandoned plugin, and every bit of custom code nobody has documented. A framework that's stopped moving, like CodeIgniter 3, adds its own list.
The honest way to find out is to look. A System Review reads the code, tells you what will break, and puts a fixed price on each fix. £250 + VAT, five working days.
What the site or system is, what it's built with if you know, and roughly how old it is.
What we will cover:
Rather talk now? Book a call or ring 01474 639 089.
We reply within one working day.