Skip to content
Abd El-Rahman Nabil edited this page Sep 25, 2026 · 2 revisions

Several PHP versions side by side, set globally or per project, with extensions, php.ini settings and Composer.

The PHP page: installed versions, Composer, and the extensions card

Versions

$ mullion php available     # current branches
$ mullion php install 8.3    # or a full version, e.g. 8.3.26
$ mullion php list
$ mullion use 8.4            # the global version (php on PATH)
$ mullion php uninstall 8.2
  • Windows uses the official builds from windows.php.net.
  • macOS uses static builds from static-php.dev, which have no dependencies. The common extensions are compiled in, including opcache, intl, imagick, redis, sodium and the pdo_mysql, pdo_sqlite and pdo_pgsql drivers.

Each version runs its own FastCGI worker (php-cgi on Windows, php-fpm on macOS) on a port derived from the version: 8.3 uses 9083. Caddy sends each site to its own version's worker. The global php on your PATH is a symlink (a junction on Windows), so switching is instant.

Per-project versions

$ cd ~/code/legacy-app
$ mullion isolate 7.4        # this site keeps PHP 7.4
$ mullion unisolate          # follow the global version again

You can also pin the version in the project page's header or Settings tab. Project commands, workers and project terminals always use the site's version.

Extensions

$ mullion php ext list            # [x] = enabled; defaults to the global version
$ mullion php ext enable intl 8.3
$ mullion php ext disable xdebug
$ mullion php ext get redis       # download a PECL extension and enable it (Windows)
  • Windows: every extension can be switched on and off, and PECL extensions (redis, xdebug, imagick, …) can be downloaded.
  • macOS: extensions are compiled into the static builds. Only the ones with an ini on/off switch, OPcache and APCu, can be toggled. The panel shows the rest as read-only.

LDAP on macOS

The static builds don't include ldap. When you install a PHP version on macOS, Mullion builds ldap.so from the matching php.net source and enables it; mullion php ext enable ldap does the same. This needs the Xcode Command Line Tools (xcode-select --install). If they're missing, PHP still installs, just without LDAP.

php.ini settings

The panel's Settings (php.ini) card and mullion php ini edit a curated set of directives for each version. Mullion validates each value and restarts that PHP version:

Key Kind
memory_limit size (e.g. 512M, -1)
upload_max_filesize, post_max_size size
max_execution_time, max_input_time, max_input_vars number
display_errors on / off
error_reporting one of the common presets
date.timezone text
opcache.validate_timestamps on / off
$ mullion php ini                          # effective values for the global version
$ mullion php ini 8.3
$ mullion php ini set memory_limit 1G
$ mullion php ini set display_errors on 8.2

From the panel you can also open the full php.ini in your text editor.

Composer

$ mullion composer install            # latest
$ mullion composer install 2.2.25     # a specific version

The PHP page shows the Composer version with an Update button.

Another PHP comes first on PATH

If php -v shows another install (Laragon or XAMPP on Windows, Homebrew on macOS), mullion use detects it and offers to disable that PATH entry. Then open a new terminal.


← Previous: Databases · Next: Node →

Clone this wiki locally