The road to PHP 8 at Combell

  • 27 November 2020
  • Reading time: 4 min
  • PHP

For the shared hosting platform at Combell, we strive to get you the latest and most up2date PHP versions. We make it a goal to be able to deliver every new PHP version on the day it is announced. We managed to do this for several months now. It is of course not a complete disaster if we bring these versions to our customers a week after it was announced on php.net, but it shows that our flow is good.

What we offer

Our PHP offer on shared hostingFirst some background on the PHP related things we offer before we dig deeper into our road to PHP 8. For PHP 7.x we also have a select set of php extensions available for our customers. These can be selected in our control panel if these are needed.

  • php
  • ext-opcache (php core extension we build shared)
  • ext-apcu
  • ext-geoip
  • ext-grpc
  • ext-igbinary
  • ext-imagick
  • ext-mailparse
  • ext-memcached
  • ext-mongodb
  • ext-redis
  • ext-sodium
  • ext-zmq

Of this list the extensions igbinary, memcached and redis are automatically selected if you use our memcached service or redis service. They are not selectable as an extension as is. The sodium extension is also not selectable, it is always enabled.

 

Initial barebones PHP 8

A few days after PHP 8 Alpha 1 was announced we started working on support for it. First make it compile. Then, do we need to provide special configuration that was not available before? Enter JIT. There are some good writeups about JIT in PHP 8, the first one we had to look at was the RFC: JIT. There we find opcache.jit which gives you 180 ways to configure the behavior of JIT in PHP. After reading the RFC we concluded that opcache.jit=1235 was indeed the most interesting setting to set by default for our usecase.

In short, this will give you as much JIT as possible on the fly, ideal for shared hosting it seems. For additional information about JIT in PHP 8 go check Brent Roose's blog who wrote 2 nice writeups about JIT: 'PHP 8: The JIT' and 'PHP 8: How to setup the JIT'.

Around 20 July 2020 we made the first barebones PHP 8 already available for customers to play around with. At the time that was PHP 8 alpha 2. We had not done any work regarding the extensions but customers with a desire to check out what was coming could already try some things out.

 

Core offering for PHP 8

The next step we had to take was, make sure we had igbinary, memcached and redis working because that is a very integrated offering. Once Beta 2 hit we started working on this and started working on this minimal core offering to be made available for customers to test if they wanted it. We got it all compiled and running in no time, igbinary worked fine, memcached as well, and thanks to the work of others, there was already a patch available to build the redis extension for PHP 8.

This setup was available for our customers around 10 September 2020. The progress was looking good and our preliminary tests also were showing good results.

 

Complete the offering

TPHP 8 immediately available at Combello make sure we had the same functionality available on PHP 8 launch day, as we have for PHP 7.x, we started completing the builds of the other extensions we offer at the end of October, beginning of November. The most common issue with the extensions was use of the now removed TSRMLS_* macros. But thanks to the hard work already done all round in the PHP community these issues were already fixed or had patches available. If you want to know more about these now removed macros, Sara Golemon wrote a nice piece about this: 'What the heck is TSRMLS_CC, anyway?'.

On 13 November 2020 we had PHP 8 RC 4 and all extensions available in our offering, ready and usable in our production environment.

 

PHP 8 release day

At 25 November 2020, our inital work to get to PHP 8 available for customers was done, around 17:00 everything related to PHP 8 was deployed on all our machines for shared hosting and ready to go for all of you to enjoy.

 

PHP 8 information

If you want more information about PHP 8 and what is changed, there are already some nice resources out there, we don't need to rehash in our story here. This is just a journey of how we got everything integrated to have it ready on launch day.

For more information about what is changed in PHP 8, and maybe how to get your application prepared to move to PHP 8, some links:

 

Thank you

Thanking the PHP community supportersWe have to thank everyone in the wider PHP community to get to this point, where we can have PHP 8 and many extensions working flawless on this shiny new release. Thanks to everyone creating awesome content to make everyone's life easier to get started with all these new features and to allow us to build better PHP applications in the future. Thanks to everyone who sponsored someone in the broader PHP community to support their work, this is awesome.

Thank you all and enjoy PHP 8.