“When you’re up to your neck in alligators, it’s hard to remember that your initial objective was to drain the swamp”
It seems quite appropriate that in wanting to start a tech blog about the difficulties in keeping up to date, I should start by having to update a whole bunch of dependencies. My web-host has WordPress as a one click add-in. So very simple. Or rather, so very not.
The issue was neither the hosting nor the installer. It was the legacy sites in my hosting account. Two particular projects that I built back in 2004 and have migrated across several hosting platforms with minimal changes. Both of them currently running in PHP 7.3 – one version behind the minimum needed for the latest version of WordPress. Even moving the PHP version forward one step broke both sites.
Delving back into code written such a long while back is always going to be tricky. One of the sites was my first ever PHP and it was pretty messy. It took a bit of effort going through the error logs to narrow it down, but eventually the problem came down to three things:
- Using GZIP in a template class to compress the HTML
- Using the each() function to transform an array into key, value pairs
- Using PHP short open tags
It took a while to find them all, buy they were all an easy fix. For the GZIP I opted to switch it off. Easier to disable it than figure out why it wasn’t working. It is an old site and it doesn’t get much traffic – so I switched it out.
For the second I was surprised to see that each() had been deprecated. Probably not news to anyone as it was back in 2017 – but it illustrates the issues with legacy code
Fortunately is easy enough to replace
while(list($key, $value) = each($array))
PHPwith
foreach($array as $key => $value)
PHPand a standalone
list($key, $value) = each($array);
PHPwith
$key = key($array);
$value = $array($key);
PHPThe final piece of the puzzle was simply to set short_open_tag to on in php.ini – in CPanel this can be accomplished in the options tab of the PHP selector.
The fact that I am now writing my first WordPress blog is proof that I got it all working.
Sadly I haven’t been able to update past PHP 8.1 as I also have a whole MySQL class based on mysqli which was end of life in 8.2 – but I have left that as a job for another day.
Leave a Reply