php -S {$_SERVER['SERVER_NAME']}:{$_SERVER['SERVER_PORT']} system/router.php"); } } if (PHP_SAPI !== 'cli') { $requestUri = $_SERVER['REQUEST_URI'] ?? ''; $scriptName = $_SERVER['SCRIPT_NAME'] ?? ''; $path = parse_url($requestUri, PHP_URL_PATH) ?? '/'; $path = str_replace('\\', '/', $path); $scriptDir = str_replace('\\', '/', dirname($scriptName)); if ($scriptDir && $scriptDir !== '/' && $scriptDir !== '.') { if (strpos($path, $scriptDir) === 0) { $path = substr($path, strlen($scriptDir)); $path = $path === '' ? '/' : $path; } } if ($path === '/___safe-upgrade-status') { $statusEndpoint = __DIR__ . '/user/plugins/admin/safe-upgrade-status.php'; header('Content-Type: application/json; charset=utf-8'); if (is_file($statusEndpoint)) { require $statusEndpoint; } else { http_response_code(404); echo json_encode([ 'status' => 'error', 'message' => 'Safe upgrade status endpoint unavailable.', ]); } exit; } } // Ensure vendor libraries exist $autoload = __DIR__ . '/vendor/autoload.php'; if (!is_file($autoload)) { die('Please run: bin/grav install'); } // Register the auto-loader. $loader = require $autoload; if (!class_exists(\Symfony\Component\ErrorHandler\Exception\FlattenException::class, false) && class_exists(\Symfony\Component\HttpKernel\Exception\FlattenException::class)) { class_alias(\Symfony\Component\HttpKernel\Exception\FlattenException::class, \Symfony\Component\ErrorHandler\Exception\FlattenException::class); } if (!class_exists(\Monolog\Logger::class, false)) { class_exists(\Monolog\Logger::class); } if (defined('Monolog\Logger::API') && \Monolog\Logger::API < 3) { require_once __DIR__ . '/system/src/Grav/Framework/Compat/Monolog/bootstrap.php'; } // Set timezone to default, falls back to system if php.ini not set date_default_timezone_set(@date_default_timezone_get()); // Set internal encoding. @ini_set('default_charset', 'UTF-8'); mb_internal_encoding('UTF-8'); $recoveryFlag = __DIR__ . '/system/recovery.flag'; if (PHP_SAPI !== 'cli' && is_file($recoveryFlag)) { require __DIR__ . '/system/recovery.php'; return 0; } use Grav\Common\Grav; use RocketTheme\Toolbox\Event\Event; // Get the Grav instance $grav = Grav::instance(array('loader' => $loader)); // Process the page try { $grav->process(); } catch (\Error|\Exception $e) { $grav->fireEvent('onFatalException', new Event(array('exception' => $e))); throw $e; }