Flake\Framework::bootstrap PHP Метод

bootstrap() статический публичный Метод

static public bootstrap ( )
    static function bootstrap()
    {
        # Asserting PHP 5.5.0+
        if (version_compare(PHP_VERSION, '5.5.0', '<')) {
            die('Flake Fatal Error: Flake requires PHP 5.5.0+ to run properly. Your version is: ' . PHP_VERSION . '.');
        }
        # Define safehash salt
        define("PROJECT_SAFEHASH_SALT", "strong-secret-salt");
        # Define absolute server path to Flake Framework
        define("FLAKE_PATH_ROOT", PROJECT_PATH_ROOT . "Core/Frameworks/Flake/");
        # ./
        if (!defined('LF')) {
            define('LF', chr(10));
        }
        if (!defined('CR')) {
            define('CR', chr(13));
        }
        if (array_key_exists("SERVER_NAME", $_SERVER) && $_SERVER["SERVER_NAME"] === "mongoose") {
            define("MONGOOSE_SERVER", true);
        } else {
            define("MONGOOSE_SERVER", false);
        }
        # Undo magic_quotes as this cannot be disabled by .htaccess on PHP ran as CGI
        # Source: http://stackoverflow.com/questions/517008/how-to-turn-off-magic-quotes-on-shared-hosting
        # Also: https://github.com/netgusto/Baikal/issues/155
        if (in_array(strtolower(ini_get('magic_quotes_gpc')), ['1', 'on'])) {
            $process = [];
            if (isset($_GET) && is_array($_GET)) {
                $process[] =& $_GET;
            }
            if (isset($_POST) && is_array($_POST)) {
                $process[] =& $_POST;
            }
            if (isset($_COOKIE) && is_array($_COOKIE)) {
                $process[] =& $_COOKIE;
            }
            if (isset($_REQUEST) && is_array($_REQUEST)) {
                $process[] =& $_REQUEST;
            }
            while (list($key, $val) = each($process)) {
                foreach ($val as $k => $v) {
                    unset($process[$key][$k]);
                    if (is_array($v)) {
                        $process[$key][stripslashes($k)] = $v;
                        $process[] =& $process[$key][stripslashes($k)];
                    } else {
                        $process[$key][stripslashes($k)] = stripslashes($v);
                    }
                }
            }
            unset($process);
        }
        # Fixing some CGI environments, that prefix HTTP_AUTHORIZATION (forwarded in .htaccess) with "REDIRECT_"
        if (array_key_exists("REDIRECT_HTTP_AUTHORIZATION", $_SERVER)) {
            $_SERVER["HTTP_AUTHORIZATION"] = $_SERVER["REDIRECT_HTTP_AUTHORIZATION"];
        }
        #################################################################################################
        # determine Flake install root path
        # not using realpath here to avoid symlinks resolution
        define("PROJECT_PATH_CORE", PROJECT_PATH_ROOT . "Core/");
        define("PROJECT_PATH_CORERESOURCES", PROJECT_PATH_CORE . "Resources/");
        define("PROJECT_PATH_SPECIFIC", PROJECT_PATH_ROOT . "Specific/");
        define("PROJECT_PATH_FRAMEWORKS", PROJECT_PATH_CORE . "Frameworks/");
        define("PROJECT_PATH_WWWROOT", PROJECT_PATH_CORE . "WWWRoot/");
        require_once PROJECT_PATH_CORE . "Distrib.php";
        define("PROJECT_PATH_DOCUMENTROOT", PROJECT_PATH_ROOT . "html/");
        # Determine PROJECT_BASEURI
        $sScript = substr($_SERVER["SCRIPT_FILENAME"], strlen($_SERVER["DOCUMENT_ROOT"]));
        $sDirName = str_replace("\\", "/", dirname($sScript));
        # fix windows backslashes
        if ($sDirName !== ".") {
            $sDirName = self::appendSlash($sDirName);
        } else {
            $sDirName = "/";
        }
        $sBaseUrl = self::rmBeginSlash(self::rmProjectContext($sDirName));
        define("PROJECT_BASEURI", self::prependSlash($sBaseUrl));
        # SabreDAV needs a "/" at the beginning of BASEURL
        # Determine PROJECT_URI
        $sProtocol = \Flake\Util\Tools::getCurrentProtocol();
        $sHttpBaseUrl = strtolower($_SERVER["REQUEST_URI"]);
        $sHttpBaseUrl = self::rmQuery($sHttpBaseUrl);
        $sHttpBaseUrl = self::rmScriptName($sHttpBaseUrl, $sScript);
        $sHttpBaseUrl = self::rmProjectContext($sHttpBaseUrl);
        define("PROJECT_URI", $sProtocol . "://" . $_SERVER["HTTP_HOST"] . $sHttpBaseUrl);
        unset($sScript);
        unset($sDirName);
        unset($sBaseUrl);
        unset($sProtocol);
        unset($sHttpBaseUrl);
        #################################################################################################
        # Include Flake Framework config
        require_once FLAKE_PATH_ROOT . "config.php";
        # Determine Router class
        $GLOBALS["ROUTER"] = \Flake\Util\Tools::router();
        if (!\Flake\Util\Tools::isCliPhp()) {
            ini_set("html_errors", true);
            session_start();
            if (!isset($_SESSION['CSRF_TOKEN'])) {
                $_SESSION['CSRF_TOKEN'] = bin2hex(openssl_random_pseudo_bytes(20));
            }
        }
        setlocale(LC_ALL, FLAKE_LOCALE);
        date_default_timezone_set(FLAKE_TIMEZONE);
        $GLOBALS["TEMPLATESTACK"] = [];
        $aUrlInfo = parse_url(PROJECT_URI);
        define("FLAKE_DOMAIN", $_SERVER["HTTP_HOST"]);
        define("FLAKE_URIPATH", \Flake\Util\Tools::stripBeginSlash($aUrlInfo["path"]));
        unset($aUrlInfo);
        # Include Project config
        # NOTE: DB initialization and App config files inclusion
        # do not break execution if not properly executed, as
        # these errors will have to be caught later in the process
        # notably by the App install tool, if available; breaking right now
        # would forbid such install tool forwarding, for instance
        $sConfigPath = PROJECT_PATH_SPECIFIC . "config.php";
        $sConfigSystemPath = PROJECT_PATH_SPECIFIC . "config.system.php";
        if (file_exists($sConfigPath)) {
            require_once $sConfigPath;
        }
        if (file_exists($sConfigSystemPath)) {
            require_once $sConfigSystemPath;
        }
        self::initDb();
    }

Usage Example

Пример #1
0
*  This script is distributed in the hope that it will be useful,
*  but WITHOUT ANY WARRANTY; without even the implied warranty of
*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
*  GNU General Public License for more details.
*
*  This copyright notice MUST APPEAR in all copies of the script!
***************************************************************/
define("BAIKAL_CONTEXT", TRUE);
define("PROJECT_CONTEXT_BASEURI", "/");
if (file_exists(getcwd() . "/Core")) {
    # Flat FTP mode
    define("PROJECT_PATH_ROOT", getcwd() . "/");
    #./
} else {
    # Dedicated server mode
    define("PROJECT_PATH_ROOT", dirname(getcwd()) . "/");
    #../
}
if (!file_exists(PROJECT_PATH_ROOT . 'vendor/')) {
    die('<h1>Incomplete installation</h1><p>Ba&iuml;kal dependencies have not been installed. Please, execute "<strong>composer install</strong>" in the folder where you installed Ba&iuml;kal.');
}
require PROJECT_PATH_ROOT . 'vendor/autoload.php';
# Bootstraping Flake
\Flake\Framework::bootstrap();
# Bootstrapping Baïkal
\Baikal\Framework::bootstrap();
if (!defined("BAIKAL_CARD_ENABLED") || BAIKAL_CARD_ENABLED !== TRUE) {
    throw new ErrorException("Baikal CardDAV is disabled.", 0, 255, __FILE__, __LINE__);
}
$server = new \Baikal\Core\Server(BAIKAL_CAL_ENABLED, BAIKAL_CARD_ENABLED, BAIKAL_DAV_AUTH_TYPE, BAIKAL_AUTH_REALM, $GLOBALS['DB']->getPDO(), BAIKAL_CARD_BASEURI);
$server->start();