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:
rex php list # installed, default, pool portrex php install 8.1rex php default 8.3 # for new sitesrex site php myshop.rex 8.1 # for one existing siteEOL versions are labelled, not hidden
Section titled “EOL versions are labelled, not hidden”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.
PHP 7.4 is rexenv’s own build
Section titled “PHP 7.4 is rexenv’s own build”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.
Why 7.4 and 8.0 get no Xdebug
Section titled “Why 7.4 and 8.0 get no Xdebug”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.
One pool per version, not per site
Section titled “One pool per version, not per site”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.