<?php
// 将 PHP 错误报告级别设为显示所有错误和警告。E_ALL 是 PHP 预定义错误常量,用于显示所有类型的错误信息。
error_reporting(E_ALL);
// 如果 phar(PHP 的归档协议,常用于打包应用)已经注册为流包装器,就注销它。
// 这行代码的目标是提高安全性:防止通过网络加载并执行的 PHAR 文件被恶意利用。
if (in_array('phar', \stream_get_wrappers())) {
stream_wrapper_unregister('phar');
}
#ini_set('display_errors', 1);
/* PHP version validation */
// PHP版本验证:这个条件语句监测当前运行的PHP版本,Magento要求PHP版本必须在8.1.0或之后
if (!defined('PHP_VERSION_ID') || PHP_VERSION_ID < 80100) {
if (PHP_SAPI == 'cli') {
echo 'Magento supports PHP 8.1.0 or later. ' .
'Please read https://devdocs.magento.com/guides/v2.4/install-gde/system-requirements-tech.html';
} else {
echo <<<HTML
<div style="font:12px/1.35em arial, helvetica, sans-serif;">
<p>Magento supports PHP 8.1.0 or later. Please read
<a target="_blank" href="https://devdocs.magento.com/guides/v2.4/install-gde/system-requirements-tech.html">
Magento System Requirements</a>.
</div>
HTML;
}
http_response_code(503);
exit(1);
}
// PHP 8 compatibility. Define constants that are not present in PHP < 8.0
// PHP 8兼容性定义:如果PHP版本小于8.0,定义不存在的常数以确保代码的正常运行,例如T_NAME_QUALIFIED 和 T_NAME_FULLY_QUALIFIED
if (!defined('PHP_VERSION_ID') || PHP_VERSION_ID < 80000) {
if (!defined('T_NAME_QUALIFIED')) {
define('T_NAME_QUALIFIED', 24001);
}
if (!defined('T_NAME_FULLY_QUALIFIED')) {
define('T_NAME_FULLY_QUALIFIED', 24002);
}
}
// 加载 autoload.php 文件,初始化并启动自动加载器
require_once __DIR__ . '/autoload.php';
// Sets default autoload mappings, may be overridden in Bootstrap::create
// 这行代码使用 Magento 框架的 Bootstrap 类来设置额外的自动加载映射
\Magento\Framework\App\Bootstrap::populateAutoloader(BP, []);
/* Custom umask value may be provided in optional mage_umask file in root */
// 文件 magento_umask 提供了自定义的 umask 设置,umask 是用来设置默认文件权限的掩码,
// 这段代码会检查是否存在magento_umask文件,若存在则使用文件中的设定,若不存在则使用默认的 002
$umaskFile = BP . '/magento_umask';
$mask = file_exists($umaskFile) ? octdec(file_get_contents($umaskFile)) : 002;
umask($mask);
// 此段代码主要是用于解决在 IIS 环境下 URL 重写的问题。如果 $_SERVER['ENABLE_IIS_REWRITES'] 不是 1,那么就清除一些 IIS URL 重写所需要的头信息
if (empty($_SERVER['ENABLE_IIS_REWRITES']) || ($_SERVER['ENABLE_IIS_REWRITES'] != 1)) {
/*
* Unset headers used by IIS URL rewrites.
*/
unset($_SERVER['HTTP_X_REWRITE_URL']);
unset($_SERVER['HTTP_X_ORIGINAL_URL']);
unset($_SERVER['IIS_WasUrlRewritten']);
unset($_SERVER['UNENCODED_URL']);
unset($_SERVER['ORIG_PATH_INFO']);
}
// 满足条件则开启性能分析器
if (
(!empty($_SERVER['MAGE_PROFILER']) || file_exists(BP . '/var/profiler.flag'))
&& isset($_SERVER['HTTP_ACCEPT'])
&& strpos($_SERVER['HTTP_ACCEPT'], 'text/html') !== false
) {
$profilerConfig = isset($_SERVER['MAGE_PROFILER']) && strlen($_SERVER['MAGE_PROFILER'])
? $_SERVER['MAGE_PROFILER']
: trim(file_get_contents(BP . '/var/profiler.flag'));
if ($profilerConfig) {
$profilerConfig = json_decode($profilerConfig, true) ?: $profilerConfig;
}
Magento\Framework\Profiler::applyConfig(
$profilerConfig,
BP,
!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest'
);
}
// 将默认的时间区设为 UTC
date_default_timezone_set('UTC');
/* For data consistency between displaying (printing) and serialization a float number */
// 为了保证浮点数的显示和序列化数据一致,将浮点数的精度设为14位
ini_set('precision', 14);
ini_set('serialize_precision', 14);