Skip to content

PHP versions

Version Xdebug Status
8.5.8 ✅ 3.5.3 Current
8.4.23 ✅ 3.5.3 Current
8.3.31 ✅ 3.5.3 Current
8.2.31 ✅ 3.5.3 Current
8.1.34 ✅ 3.5.3 Past its php.net security-end date
8.0.30 Past its php.net security-end date
7.4.33 Past its php.net security-end date

Install and switch:

Terminal window
rex php list # installed, default, pool port
rex php install 8.1
rex php default 8.3 # for new sites
rex site php myshop.rex 8.1 # for one existing site

7.4, 8.0 and 8.1 are past their upstream security-end dates. rexenv ships them anyway — plenty of real work happens on legacy codebases, and a local environment that refuses to run what your client runs is not useful.

What it does instead is badge them: in Settings, in the create dialog, and on the site’s own Environment card. Choosing one stays a decision rather than becoming an accident.

static-php.dev, which supplies the 8.x builds, publishes no 7.4. rexenv builds it — the result is published from the public rexenv/runtimes repository, pinned to an immutable release so the pin can 404 but can never silently change under you.

Two differences from the 8.x rows, both structural rather than oversights:

  • No Xdebug (see below).
  • PCRE JIT is compiled out. The bundled PCRE2 predates Apple Silicon, and with JIT enabled Composer died on Allocation of JIT memory failed. Regex throughput on 7.4 is therefore lower than on the 8.x versions. A working 7.4 that is slower at regex beats a fast one that cannot run Composer.

Xdebug is a shared object that has to dlopen into the running PHP. Those two static builds do not export the Zend symbols it needs — measured, not assumed: rexenv’s 7.4 exports around 22,400 symbols and _OnUpdateBool is not among them.

No external .so can load into them, so the per-site Xdebug toggle is not offered there rather than being offered and then failing. See Xdebug.

rexenv runs one php-fpm pool per installed PHP version, shared by every site using it — not one pool per site. Ten sites on 8.3 are ten server blocks in front of one pool.

That is why switching a site’s PHP version is instant and costs nothing: it re-points the site’s server block at a different pool. Nothing is rebuilt, and the docroot, certificate and database are untouched.