我正在使用 yii 2 和
我安装了该软件包:
"vlucas/phpdotenv": "^5.6"
在根目录中我有一个文件夹 env/dev/.env.dev
所以我更改了 web/index.php 文件,例如:
<?php
// phpcs:ignoreFile
$path = dirname(__DIR__ . '/', '../env/dev/.env.dev' );
require $path . '/vendor/autoload.php';
$dotEnv = Dotenv\Dotenv::createImmutable($path);
$dotEnv->load();
defined('YII_DEBUG') or define('YII_DEBUG', $_ENV['YII_DEBUG']);
defined('YII_ENV') or define('YII_ENV', $_ENV['YII_ENV']);
require $path . '/vendor/yiisoft/yii2/Yii.php';
$config = require $path . '/config/web.php';
try {
(new yii\web\Application($config))->run();
} catch (yii\base\InvalidConfigException $exception) {
echo $exception->getMessage();
}
但是后来我得到了这个错误:
<br />
<b>Fatal error</b>: Uncaught TypeError: dirname(): Argument #2 ($levels) must be of type int, string given in
C:\repos\internet_backend\web\index.php:3
Stack trace:
#0 C:\repos\internet_backend\web\index.php(3): dirname('C:\\repos\\intern...', '../env/dev/.env...')
#1 {main}
thrown in <b>C:\repos\internet_backend\web\index.php</b> on line <b>3</b><br />
所以我尝试过。请点击此链接:https://matthewsetter.com/set-environment-variables-php-dotenv/
并落实其建议
问题:如何运行.env.dev文件?
dirname()
将路径作为第一个参数。它将父目录的路径返回到给定路径。您可以选择提供第二个参数 $levels
,但它必须是 int,并且它表示在返回结果之前 dirname() 应该向上移动多少层。
__DIR__
魔法常量包含当前文件所在目录的路径。
所以,如果您在
/path/to/my/project/web/index.php
。然后 dirname(__DIR__)
将返回 /path/to/my/project
。
如果你想获得
/path/to/my/project/env/dev
内部/path/to/my/project/web/index.php
的路径,你可以使用:
$path = dirname(__DIR__) . '/env/dev';
如果您的配置文件名为
.env.dev
而不是 .env
,您不能将其指定为目录路径的一部分,而是必须在 Dotenv\Dotenv::createImmutable($path, '.env.dev')
调用中提供文件名作为第二个参数。
所以整个代码可以如下所示:
<?php
// phpcs:ignoreFile
$path = dirname(__DIR__) . '/env/dev';
require $path . '/vendor/autoload.php';
$dotEnv = Dotenv\Dotenv::createImmutable($path, '.env.dev');
$dotEnv->load();
defined('YII_DEBUG') or define('YII_DEBUG', $_ENV['YII_DEBUG']);
defined('YII_ENV') or define('YII_ENV', $_ENV['YII_ENV']);
require $path . '/vendor/yiisoft/yii2/Yii.php';
$config = require $path . '/config/web.php';
try {
(new yii\web\Application($config))->run();
} catch (yii\base\InvalidConfigException $exception) {
echo $exception->getMessage();
}