Case study: a CodeIgniter 3 booking system
A practice upgrade I did on public open-source code to test my process. It is not a client project, and the original author was not involved. This run targeted PHP 8.3; new projects default to PHP 8.4.
Before289 distinct PHP errors in one click-through on PHP 8.3. Sessions broke, the admin area wouldn't load, the CAPTCHA image and API search failed, and three files wouldn't even compile.
After0 PHP errors in development and production mode on PHP 8.3.6. Booking, confirmation email with calendar invite, admin and the full REST API all pass.
Fix: replaced the bundled framework with CodeIgniter 3.1.13, upgraded PHPMailer (5.2 to 6), the CAPTCHA library and the calendar export library, patched framework classes for PHP 8.2's dynamic property rules, fixed two runtime bugs by hand, and moved the test suite from PHPUnit 5 to 9.
Flagged separately: the bundled Google Calendar client is old and was only patched, not tested with real credentials. Replacing it is quoted as its own job.
287 / 289
errors cleared by the framework upgrade, library upgrades and the dynamic property patch. The other 2 needed real debugging.
0
PHP errors after the upgrade, in development and production mode, on every tested flow.
30
unit tests passing on PHPUnit 9, including a new regression test for the API search crash.
What was tested, and what wasn't
Tested: installer, booking page, available times, submitting a booking, the confirmation email with a valid calendar attachment, five admin pages and their background requests, every REST API v1 resource, and logout.
Not tested: Google Calendar sync with real credentials, rarely used language packs, and notification channels other than email. Code paths outside the tested flows can still hold PHP 8 problems, which is why every report lists both.
At about 20,000 lines, an app like this is above the Framework app tier's 15,000-line limit, so it would get a fixed quote after the Check-up.