if ($_SERVER['SERVER_NAME'] == 'localhost' || $_SERVER['SERVER_NAME'] == '127.0.0.1')
{
defined('YII_DEBUG') or define('YII_DEBUG', true);
defined('YII_ENV') or define('YII_ENV', 'dev');
}
require __DIR__ . '/../../vendor/autoload.php';
require __DIR__ . '/../../vendor/yiisoft/yii2/Yii.php';
require __DIR__ . '/../../common/config/bootstrap.php';
require __DIR__ . '/../config/bootstrap.php';
if(YII_ENV == 'prod')
{
$config = yii\helpers\ArrayHelper::merge(
require __DIR__ . '/../../common/config/main.php',
require __DIR__ . '/../config/main.php'
);
}
else
{
$config = yii\helpers\ArrayHelper::merge(
require __DIR__ . '/../../common/config/main.php',
require __DIR__ . '/../../common/config/main-local.php',
require __DIR__ . '/../config/main.php',
require __DIR__ . '/../config/main-local.php'
);
}
我正在尝试使用多个环境,但不要在文件中随时更改,因此我使用if index.php
文件中的条件及其工作但我不知道这是正确的方法还是不。
答案 0 :(得分:1)
不,不是。这是一个潜在的安全问题 - $_SERVER['SERVER_NAME']
可能会被欺骗,因此有人可能会使用localhost
作为主机名访问您的远程生产服务器。如果您未在网络服务器级别验证主机名,那么他将在调试模式下看到您的网站。来自$_SERVER['SERVER_NAME']
docs:
注意:在Apache 2下,您必须设置UseCanonicalName = On和ServerName。否则,此值反映客户端提供的主机名,这可能是欺骗性的。在依赖于安全性的上下文中依赖此值是不安全的。
您应该将特定于环境的设置/常量保留在版本控制之外的单独文件中。例如在config/environment-local.php
中。并在每个实例上手动设置它。
您也可以使用Composer挂钩来复制此文件的默认内容 - 我在my template中实现了类似的内容。然后,请将此文件放在index.php
文件的顶部,而不是您的条件:
require __DIR__ . '/../config/environmen-local.php';
require __DIR__ . '/../../vendor/autoload.php';
require __DIR__ . '/../../vendor/yiisoft/yii2/Yii.php';
require __DIR__ . '/../../common/config/bootstrap.php';
require __DIR__ . '/../config/bootstrap.php';
// rest of bootstrap