Docs
PHP
PHP versions 5.6 to 8.5 in Covo, support status, php.ini per version and per site, Xdebug, compatibility checks, Composer and wp-cli.
On this page
Each site in Covo has its own PHP version, and different versions run side by side. Covo uses self-contained PHP builds kept in its own folder: it never uses or changes a PHP installed by Homebrew, MAMP or macOS. Each version runs as one PHP-FPM process shared by every site on that version, and only the versions your sites use are started.
Versions
Covo offers PHP 5.6 to 8.5 (there was never a PHP 6).
| Versions | Source | Needs |
|---|---|---|
| 8.0 to 8.5 | static-php-cli builds | No extra requirement |
| 5.6 to 7.4 | Builds from shivammathur/php, with security fixes backported after end of life | Apple Silicon and macOS 15 or later |
covo php list
covo php install 8.3
You rarely need covo php install: Covo downloads a version when a site needs it. Every download is checked against a pinned SHA-256 checksum before use.
To change a site’s version, pick it in the site detail, or:
covo site set shop --php 8.2
Support status and end-of-life warnings
covo php list shows php.net’s support status for each version: active, security fixes only, or end of life. Versions past their end of life stay available for old sites, but they no longer get security fixes. The app shows a warning on sites that use one, and covo site add and covo site set print a warning too.
Before moving such a site to a newer version, run a compatibility check (below). The app offers it from a button under the warning.
php.ini per version
Each PHP version has its own php.ini settings, shared by every site on that version. In the app: Settings → PHP.
covo php settings 8.4
covo php settings 8.4 memory_limit=1G upload_max_filesize=256M max_execution_time=0 display_errors=off
| Setting | Default | Values |
|---|---|---|
memory_limit |
512M | A size (K, M, G) or -1 for no limit |
upload_max_filesize |
128M | A size. post_max_size always follows it |
max_execution_time |
300 | Seconds, 0 for no limit, at most 86400 |
display_errors |
on | on or off |
Changes restart that PHP version at once if Covo is running. Values are checked before anything is saved. Errors always go to the site’s PHP error log, whatever display_errors says.
php.ini per site
A site can override these values on top of its PHP version’s. In the app: site detail, Advanced, PHP settings.
covo site php shop # effective values and where each comes from
covo site php shop memory_limit=1G display_errors=off
covo site php shop memory_limit= # back to the PHP version's value
A site’s values never leak into another site on the same version.
Xdebug
Xdebug is off by default and is turned on per PHP version:
covo php xdebug # state for each installed version
covo php xdebug on 8.4 # restarts PHP 8.4 if Covo is running
covo php xdebug off 8.4
In the app, the toggle is in the site’s Advanced section. When on, Xdebug is set up for step debugging only, and it starts only when a request asks for it (the Xdebug browser extension, or an XDEBUG_TRIGGER cookie or parameter), so pages without the trigger run at normal speed. Your IDE listens on 127.0.0.1 port 9003. Covo opens no port for Xdebug.
Covo’s Xdebug builds are made in public by getcovo/covo-binaries, each tied to one exact PHP release. They are for Apple Silicon only, and not every PHP version has one yet.
Compatibility check
Before switching a legacy site to a newer PHP, Covo can list what in its code would break:
covo php check shop # against the newest fully supported PHP
covo php check shop --target 8.2
covo php check shop --all # WordPress: include core, not only wp-content
It runs PHP_CodeSniffer with PHPCompatibility (and PHPCompatibilityWP for WordPress sites, which knows WordPress’s polyfills). Errors break on the target version, and warnings are deprecations. Your code is only read. For WordPress sites, only wp-content is checked by default. node_modules, .git, wp-content/uploads and wp-content/cache are skipped.
PHPCompatibility 10 is still an alpha release, but it is the only one that knows PHP 8. Treat the result as a list to review, not a guarantee.
In the app: site detail, Advanced, PHP compatibility.
Composer and wp-cli with the site’s PHP
covo composer, covo artisan and covo wp run each tool with the site’s exact PHP version and Covo’s php.ini, in the site’s folder. Arguments, output and exit codes pass through unchanged.
covo composer shop require guzzlehttp/guzzle
covo artisan shop migrate
covo wp blog plugin list
Sites on PHP older than 7.3 get Composer 2.2 LTS. Composer’s cache stays in Covo’s folder, not in ~/.composer. In the app: the wp-cli, Artisan and Composer tile in the site detail. More in WordPress and Laravel.