<?php declare(strict_types=1); use Airship\Engine\{ Cache\File as FileCache, Cache\SharedMemory as MemoryCache }; use ParagonIE\ConstantTime\Binary; if (empty($_POST)) { /** * Let's get rid of trailing slashes in URLs without POST data */ $sliceAt = Binary::safeStrlen($_SERVER['REQUEST_URI']) - 1; if ($sliceAt > 0 && $_SERVER['REQUEST_URI'][$sliceAt] === '/') { \Airship\redirect( '/' . \trim($_SERVER['REQUEST_URI'], '/') ); } /** * Let's handle static content caching */ if (\extension_loaded('apcu')) { $staticCache = (new MemoryCache()) ->personalize('staticPage:'); $cspCache = (new MemoryCache()) ->personalize('contentSecurityPolicy:'); } else { if (!\is_dir(ROOT . '/tmp/cache/static')) { require_once ROOT . '/tmp_dirs.php'; } $staticCache = new FileCache(ROOT . '/tmp/cache/static'); $cspCache = new FileCache(ROOT . '/tmp/cache/csp_static'); } $port = $_SERVER['HTTP_PORT'] ?? ''; $lookup = $_SERVER['HTTP_HOST'] . ':' . $port . '/' . $_SERVER['REQUEST_URI']; $staticPage = $staticCache->get($lookup); if (!empty($staticPage)) { if (!\headers_sent()) { foreach (\Airship\get_standard_headers('text/plain;charset=UTF-8') as $left => $right) { \header($left . ': ' . $right); } } $csp = $cspCache->get($lookup); if (!empty($csp)) { foreach (\json_decode($csp, true) as $cspHeader) { \header($cspHeader); } } echo $staticPage; // This is just for benchmarking purposes: echo '<!-- Load time: ' . \round(\microtime(true) - $start, 5) . ' s (static page) -->'; exit; } unset($staticCache); } |