Re: Re: [RFC] Single binary for CLI and FPM

From: Date: Thu, 08 Oct 2026 14:25:14 +0000
Subject: Re: Re: [RFC] Single binary for CLI and FPM
References: 1 2 3  Groups: php.internals 
Request: Send a blank email to internals+get-132835@lists.php.net to get a copy of this message
Hi On 2026-10-08 15:53, Matthieu Napoli wrote:
Right, good point, I agree too, thanks! I opened a new PR that goes the other way around: https://github.com/php/php-src/pull/24192 I have also updated the RFC: https://wiki.php.net/rfc/single-binary-cli-fpm - php CLI is unchanged - php-fpm *always* includes php (and runs as CLI when run as php instead of php-fpm) - no need for a build option anymore - the diff is simpler - FPM aligns with FrankenPHP (both include the CLI) - No --fpm CLI option anymore, solves the objections raised previously in this thread That sounds much better indeed.
I disagree that this is better from a discoverability and predictability point of view and I also disagree with the concerns that the original proposal would somehow “privilege” FPM. As for the first part: When running a PHP binary on the command line, my expectation is that I'm running a CLI application and thus I expect to end up in the CLI SAPI. Suddenly starting FPM, which potentially binds ports or sockets, just because I happen to name the binary the wrong name (e.g. when using a custom p symlink to run PHP after my distro switched to the “combined binary” setup or just php-8.7 that the RFC notes as running FPM) would be very surprising. With the current proposal I also have no way out, except naming the binary differently. Changing behavior based on the binary name to do entirely different things is something that is comparatively rarely used and thus folks are unlikely to be accustomed to this being a thing (the most prominent example that comes to mind would be Busybox). An explicit flag / argument would be properly discoverable (appearing in help outputs) and would also be reliably scriptable. For the second point, and tying into the first: PHP FPM is a / the recommended solution of running PHP as a FastCGI application. Adding an --fpm flag to the PHP binary to run PHP in “FastCGI mode” would match the -S flag to run PHP in “HTTP mode” (which switches from the cli to the cli-server SAPI). I understand that the current “HTTP mode” implementation is meant to be used for development purposes only, but that is an implementation detail. We could in theory implement a production grade web server to PHP tomorrow (and potentially add --http as the entrypoint for the “HTTP mode”, keeping -S as an alias) and then we would have:
    php # CLI mode
    php --fpm # FastCGI mode
    php --http # HTTP mode
with the php binary being the singular entrypoint for all use cases where PHP is running “standalone” rather than embedded into something else (as with mod_php). Alternatively, we use --mode=fpm to switch to FPM mode instead of reserving the top level --fpm flag. Best regards Tim Düsterhus

« previous php.internals (#132835) next »