Files
Virtnet.bond/vendor/laravel/octane/bin/frankenphp-worker.php
2026-03-12 22:47:38 +01:00

80 lines
2.3 KiB
PHP

<?php
use Laravel\Octane\ApplicationFactory;
use Laravel\Octane\FrankenPhp\FrankenPhpClient;
use Laravel\Octane\RequestContext;
use Laravel\Octane\Stream;
use Laravel\Octane\Worker;
use Symfony\Component\HttpFoundation\Response;
if ((! ($_SERVER['FRANKENPHP_WORKER'] ?? false)) || ! function_exists('frankenphp_handle_request')) {
echo 'FrankenPHP must be in worker mode to use this script.';
exit(1);
}
ignore_user_abort(true);
$basePath = require __DIR__.'/bootstrap.php';
/*
|--------------------------------------------------------------------------
| Start The Octane Worker
|--------------------------------------------------------------------------
|
| Next we will start the Octane worker, which is a long running process to
| handle incoming requests to the application. This worker will be used
| by FrankenPHP to serve an entire Laravel application at high speed.
|
*/
$frankenPhpClient = new FrankenPhpClient();
$worker = tap(new Worker(
new ApplicationFactory($basePath), $frankenPhpClient
))->boot();
$requestCount = 0;
$debugMode = $_ENV['APP_DEBUG'] ?? $_SERVER['APP_DEBUG'] ?? 'false';
$maxRequests = $_ENV['MAX_REQUESTS'] ?? $_SERVER['MAX_REQUESTS'] ?? 1000;
$requestMaxExecutionTime = $_ENV['REQUEST_MAX_EXECUTION_TIME'] ?? $_SERVER['REQUEST_MAX_EXECUTION_TIME'] ?? null;
if (PHP_OS_FAMILY === 'Linux' && ! is_null($requestMaxExecutionTime)) {
set_time_limit((int) $requestMaxExecutionTime);
}
try {
$handleRequest = static function () use ($worker, $frankenPhpClient, $debugMode) {
try {
[$request, $context] = $frankenPhpClient->marshalRequest(new RequestContext());
$worker->handle($request, $context);
} catch (Throwable $e) {
if ($worker) {
report($e);
}
$response = new Response(
$debugMode === 'true' ? (string) $e : 'Internal Server Error',
500,
[
'Status' => '500 Internal Server Error',
'Content-Type' => 'text/plain',
],
);
$response->send();
Stream::shutdown($e);
}
};
while ($requestCount < $maxRequests && frankenphp_handle_request($handleRequest)) {
$requestCount++;
}
} finally {
$worker?->terminate();
gc_collect_cycles();
}