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(); }