PHP
Erkannt über composer.json. Ausgeliefert mit FrankenPHP.
Siehe Buildpacksfür Detection und Versionspolitik. Ein Tree, der auch package.json hat, bekommt Node.jsim selben Build (Laravel + Vite).
Erkennt
composer.json im Base directory.
Versionen
Default ist PHP 8.3. Veröffentlichte Lines Stand September 2026: 8.2-8.5. Du bekommst den neuesten Patch der angefragten Minor.
Pinnen, in dieser Reihenfolge:
.php-versionrequire.phpincomposer.json(ein Range nimmt die höchste passende veröffentlichte Version)
Composer selbst ist ein Build-Tool. Du pinnst es nicht.
Install und Build
composer install --no-dev --optimize-autoloader. Laravel (artisan) cached dann Config, Routes, Views und Events, wenn diese Artisan-Commands existieren. Symfony (bin/console plus symfony.lock) führt cache:warmup --env=prod aus.
Launch-Defaults: Laravel APP_ENV=production, LOG_CHANNEL=stderr, APP_DEBUG=false. Symfony APP_ENV=prod, APP_DEBUG=0.
Start-Command
Document Root ist public/, oder web/, oder die App-Wurzel.
- Laravel Octane (Lockfile listet
laravel/octane):php artisan octane:frankenphp --port=$PORT --host=0.0.0.0 - sonst:
frankenphp php-server --listen :$PORT --root <docroot>
Mit einer Procfile überschreiben. Auf PORT lauschen.