If you are building high-performance Laravel applications, you are likely already exploring the limits of what's possible with FrankenPHP and Laravel Octane. In my previous work designing a production-ready Laravel architecture with Traefik and FrankenPHP, I promoted this stack for its simplicity and raw power.


However, bleeding-edge tech often comes with bleeding-edge problems. Recently, I lost three hours debugging an issue that should have been obvious: The FrankenPHP binary installed by Laravel Octane is version-locked.

In my case, it was locked to PHP 8.4, despite my system running the latest stable PHP 8.5. If you are trying to upgrade your stack or build a high-performance directory like I did for LaraPlugins.io, you need your environment to match your expectations.

Here is how to force FrankenPHP to use PHP 8.5 and stop chasing ghost bugs.

The Root Cause: Standard PHP vs. PHP-ZTS

The core misunderstanding, and the reason for the missing extensions in your logs, is simple but critical:

FrankenPHP does not use your system’s standard PHP installation.

It requires PHP-ZTS (Zend Thread Safety). This is a specialized build of PHP that allows it to run safely in a multithreaded environment, which is essential for FrankenPHP's worker mode.

When you run php artisan octane:install, it downloads a static FrankenPHP binary. As of early 2026, this static binary defaults to PHP 8.4. It ignores your local php -v and your locally installed apt extensions. If you need PHP 8.5 (or specific extensions not bundled in the static binary), you must bypass the static binary and install FrankenPHP dynamically using your system's package manager.

The Solution: Installing PHP 8.5 ZTS

To get PHP 8.5 working, we need to use the repository maintained by Marc Henderkes (a key contributor to FrankenPHP packages). This provides the necessary ZTS builds for Debian/Ubuntu and RedHat systems.

1. Add the Repository

Use the official installer script to set up the repository for PHP 8.5:

curl -fsSL https://files.henderkes.com/install.sh | sudo sh -s 8.5

Note: If you are on Fedora/CentOS, you might look for the RPMs at rpms.henderkes.com, but for Debian/Ubuntu, the script above handles the setup. Also go there if you do not trust shell scripts from me or the internet, they have a manual install too.

2. Install PHP-ZTS Extensions

Once the repo is added, install the specific ZTS versions of your required extensions. The standard php-extension packages won't work here. need to install the php-zts packages:

sudo apt install php-zts-{bcmath,bz2,gd,gmp,intl,zip,sqlite3,mysql,mbstring}

I've added mysql and mbstring to the list above as they are common requirements for Laravel apps but remember to edit the list to your needs!

3. Install FrankenPHP

Finally, install the FrankenPHP binary that links against this new ZTS PHP version:

sudo apt install frankenphp

Now, when you start Octane, it will utilize the system-installed frankenphp binary, which in turn uses your custom PHP 8.5 ZTS environment.

Troubleshooting: The "Ghost" Errors

If FrankenPHP crashes or behaves erratically without outputting an error, it is likely swallowing the logs. LLMs (Large Language Models) currently struggle to debug this because they often hallucinate standard Nginx/FPM config fixes or are jus tchecking the laravel logs.

The specific command to reveal the internal worker errors is:

php artisan octane:start --log-level=debug

This single flag saved me 30 minutes of frustration. It forces the worker output to your terminal, revealing the actual missing extensions or startup errors that the default log level suppresses. save it somewhere so the llm know how to debug these issues.

Summary

To recap:

  1. Don't trust the static binary if you need bleeding-edge PHP versions.
  2. Install PHP-ZTS explicitly using the Henderkes repository.
  3. Use --log-level=debug before you start tearing your hair out.

By managing your own ZTS runtime, you regain control over extensions and versions, ensuring your high-performance architectures remain robust and up-to-date.

Have fun building.