From e8ff723e45cb154e94bed42d78e44250b4473102 Mon Sep 17 00:00:00 2001 From: Roman Pronskiy Date: Mon, 9 Mar 2026 19:05:19 +0100 Subject: [PATCH 1/4] Add FrankenPHP installation guide and support in downloads page --- downloads-get-instructions.php | 28 ++++++++++----- downloads.php | 8 +++++ include/download-instructions/frankenphp.php | 38 ++++++++++++++++++++ 3 files changed, 66 insertions(+), 8 deletions(-) create mode 100644 include/download-instructions/frankenphp.php diff --git a/downloads-get-instructions.php b/downloads-get-instructions.php index ea6e7226fd..025f2b1192 100644 --- a/downloads-get-instructions.php +++ b/downloads-get-instructions.php @@ -41,19 +41,31 @@ switch ($options['os']) { case 'linux': - $defaultOrCommunity = ($options['version'] !== 'default' || $multiversion) ? 'community' : 'default'; - if ($defaultOrCommunity === 'community' && $options['version'] == 'default') { - $options['version'] = $latestPhpVersion; - } - if (str_starts_with("{$options['osvariant']}", 'linux-docker')) { - $file = "{$options['osvariant']}-{$defaultOrCommunity}"; + if ($options['osvariant'] === 'linux-frankenphp') { + if ($options['version'] === 'default') { + $options['version'] = $latestPhpVersion; + } + $file = 'frankenphp'; } else { - $file = "{$options['osvariant']}-web-{$defaultOrCommunity}"; + $defaultOrCommunity = ($options['version'] !== 'default' || $multiversion) ? 'community' : 'default'; + if ($defaultOrCommunity === 'community' && $options['version'] == 'default') { + $options['version'] = $latestPhpVersion; + } + if (str_starts_with("{$options['osvariant']}", 'linux-docker')) { + $file = "{$options['osvariant']}-{$defaultOrCommunity}"; + } else { + $file = "{$options['osvariant']}-web-{$defaultOrCommunity}"; + } } break; case 'osx': case 'windows': - if ($options['osvariant'] === "{$options['os']}-scoop") { + if ($options['osvariant'] === "{$options['os']}-frankenphp") { + if ($options['version'] === 'default') { + $options['version'] = $latestPhpVersion; + } + $file = 'frankenphp'; + } elseif ($options['osvariant'] === "{$options['os']}-scoop") { $file = "{$options['osvariant']}-" . ($options['version'] == $latestPhpVersion ? 'main' : 'versions'); } else { $file = "{$options['osvariant']}"; diff --git a/downloads.php b/downloads.php index 21325269b9..733f545769 100644 --- a/downloads.php +++ b/downloads.php @@ -131,6 +131,12 @@ function option(string $value, string $desc, $attributes = []): string $options = array_merge($defaults, $_GET); +if ($options['usage'] === 'web') { + $os['linux']['variants']['linux-frankenphp'] = 'FrankenPHP'; + $os['osx']['variants']['osx-frankenphp'] = 'FrankenPHP'; + $os['windows']['variants']['windows-frankenphp'] = 'FrankenPHP'; +} + if ($auto_osvariant && (!array_key_exists('osvariant', $options) || !array_key_exists($options['osvariant'], $os[$options['os']]['variants']))) { $options['osvariant'] = $auto_osvariant; } elseif (!array_key_exists('osvariant', $options) || !array_key_exists($options['osvariant'], $os[$options['os']]['variants'])) { @@ -169,6 +175,7 @@ function option(string $value, string $desc, $attributes = []): string + + diff --git a/include/download-instructions/frankenphp.php b/include/download-instructions/frankenphp.php new file mode 100644 index 0000000000..005dc9448c --- /dev/null +++ b/include/download-instructions/frankenphp.php @@ -0,0 +1,38 @@ + +

+On the command line, run the following commands: +

+

+# Download and install FrankenPHP.
+curl https://frankenphp.dev/install.sh | sh
+
+# Serve the current directory.
+frankenphp php-server
+
+ +

+On the command line, run the following commands: +

+

+# Install FrankenPHP using Homebrew.
+brew install dunglas/frankenphp/frankenphp
+
+# Serve the current directory.
+frankenphp php-server
+
+ +

+In PowerShell, run the following commands: +

+

+# Download and install FrankenPHP.
+irm https://frankenphp.dev/install.ps1 | iex
+
+# Serve the current directory.
+frankenphp php-server
+
+ + +

+For more information, see the FrankenPHP documentation. +

From 0dd618c77f15dedb0ae96c69029579f3ed540fe8 Mon Sep 17 00:00:00 2001 From: Roman Pronskiy Date: Fri, 12 Jun 2026 16:20:25 +0200 Subject: [PATCH 2/4] Add note about manual updates for standalone FrankenPHP binaries --- include/download-instructions/frankenphp.php | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/include/download-instructions/frankenphp.php b/include/download-instructions/frankenphp.php index 005dc9448c..9e9d114d90 100644 --- a/include/download-instructions/frankenphp.php +++ b/include/download-instructions/frankenphp.php @@ -9,6 +9,17 @@ # Serve the current directory. frankenphp php-server +
+

+ The install script uses your distribution's packages (deb or RPM) when + available, and those receive updates through the system package manager. + If a standalone binary is installed instead, FrankenPHP does not update + automatically: its dependencies (such as OpenSSL) are statically compiled + into the binary, so you are responsible for updating FrankenPHP yourself, + including when security fixes are released for those dependencies. To + update the standalone binary, re-run the install script. +

+

On the command line, run the following commands: @@ -31,6 +42,15 @@ # Serve the current directory. frankenphp php-server +

+

+ The standalone binary installed by this script does not update + automatically: its dependencies (such as OpenSSL) are statically compiled + into the binary, so you are responsible for updating FrankenPHP yourself, + including when security fixes are released for those dependencies. To + update, re-run the install script in PowerShell. +

+

From 6216ba4cb6900202a60cf2dcbee8b09f4866c6a5 Mon Sep 17 00:00:00 2001 From: Roman Pronskiy Date: Fri, 12 Jun 2026 16:24:01 +0200 Subject: [PATCH 3/4] Always offer FrankenPHP variant on the downloads page --- downloads.php | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/downloads.php b/downloads.php index 733f545769..3908f2e157 100644 --- a/downloads.php +++ b/downloads.php @@ -131,11 +131,9 @@ function option(string $value, string $desc, $attributes = []): string $options = array_merge($defaults, $_GET); -if ($options['usage'] === 'web') { - $os['linux']['variants']['linux-frankenphp'] = 'FrankenPHP'; - $os['osx']['variants']['osx-frankenphp'] = 'FrankenPHP'; - $os['windows']['variants']['windows-frankenphp'] = 'FrankenPHP'; -} +$os['linux']['variants']['linux-frankenphp'] = 'FrankenPHP'; +$os['osx']['variants']['osx-frankenphp'] = 'FrankenPHP'; +$os['windows']['variants']['windows-frankenphp'] = 'FrankenPHP'; if ($auto_osvariant && (!array_key_exists('osvariant', $options) || !array_key_exists($options['osvariant'], $os[$options['os']]['variants']))) { $options['osvariant'] = $auto_osvariant; From 742aed4106c31fe025b3ce619bf3927cf09da286 Mon Sep 17 00:00:00 2001 From: Roman Pronskiy Date: Fri, 12 Jun 2026 16:29:24 +0200 Subject: [PATCH 4/4] Use the manual's blockquote.note markup for the FrankenPHP note --- include/download-instructions/frankenphp.php | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/include/download-instructions/frankenphp.php b/include/download-instructions/frankenphp.php index 9e9d114d90..982bfee6f7 100644 --- a/include/download-instructions/frankenphp.php +++ b/include/download-instructions/frankenphp.php @@ -9,8 +9,8 @@ # Serve the current directory. frankenphp php-server -

-

+

+ Note: The install script uses your distribution's packages (deb or RPM) when available, and those receive updates through the system package manager. If a standalone binary is installed instead, FrankenPHP does not update @@ -18,8 +18,7 @@ into the binary, so you are responsible for updating FrankenPHP yourself, including when security fixes are released for those dependencies. To update the standalone binary, re-run the install script. -

-
+

On the command line, run the following commands: @@ -42,15 +41,14 @@ # Serve the current directory. frankenphp php-server -

-

+

+ Note: The standalone binary installed by this script does not update automatically: its dependencies (such as OpenSSL) are statically compiled into the binary, so you are responsible for updating FrankenPHP yourself, including when security fixes are released for those dependencies. To update, re-run the install script in PowerShell. -

-
+