<?php declare(strict_types=1); use Airship\Engine\State; use ParagonIE\Halite\Halite; /** * This is loaded before everything else in the bootstrapping process. */ if (PHP_VERSION_ID < 70200) { die("Airship requires PHP 7.2.0 or newer. You are running PHP " . PHP_VERSION); } if (!extension_loaded('sodium')) { die("Airship requires Libsodium."); } // This is set to FALSE. It allows us to give IDEs hints that should never be executed. define('IDE_HACKS', false); /** * 1. Define come constants */ if (!\defined('ROOT')) { define('ROOT', __DIR__); } define('AIRSHIP_UPLOADS', ROOT . '/files/uploaded/'); if (!\defined('ISCLI')) { define('ISCLI', PHP_SAPI === 'cli'); } if (!\defined('CURLPROXY_SOCKS5_HOSTNAME')) { define('CURLPROXY_SOCKS5_HOSTNAME', 7); } if (!\is_dir(ROOT . '/tmp')) { // Load the sanity check script that makes sure the necessary // tmp/* directories exist and are writable. require_once ROOT . '/tmp_dirs.php'; } if (ISCLI) { if (isset($argc)) { $_SERVER['REQUEST_URI'] = $argc > 1 ? $argv[1] : '/'; } elseif(empty($_SERVER['REQUEST_URI'])) { $_SERVER['REQUEST_URI'] = ''; } } elseif (\file_exists(ROOT . '/tmp/site_down.txt')) { // There might be an automatic update in progress! // Let's give it up to 15 seconds, but only as much time as is needed. $iter = 0; do { if (!\file_exists(ROOT . '/tmp/site_down.txt')) { break; } \usleep(1000); ++$iter; } while ($iter < 15000); \clearstatcache(); // If we're still in the middle of that process, let's not load anything else: if (\file_exists(ROOT . '/tmp/site_down.txt')) { echo 'This Airship is currently being upgraded. Please try again later.', "\n"; exit(255); } } if (!isset($_SERVER['REQUEST_URI'])) { $_SERVER['REQUEST_URI'] = ''; } /** * 2. Load the Airship functions */ require_once ROOT . '/Airship.php'; /** * 3. Let's autoload the composer packages */ require_once \dirname(ROOT) . '/vendor/autoload.php'; // Let's also make sure we're using a good version of libsodium if (!Halite::isLibsodiumSetupCorrectly()) { die("Airship requires libsodium 1.0.9 or newer (with a stable version of the PHP bindings)."); } /** * 4. Autoload the Engine files */ \Airship\autoload('Airship\\Alerts', '~/Alerts'); \Airship\autoload('Airship\\Engine', '~/Engine'); /** * 5. Load up the registry singleton for latest types */ $state = State::instance(); // 5a. Initialize the Gears. require_once ROOT.'/gear_init.php'; /** * 6. Load the global functions */ require_once ROOT.'/global_functions.php'; require_once ROOT.'/view_functions.php'; /** * 7. Load all of the cryptography keys */ require_once ROOT.'/keys.php'; |