PHP DOTENV 无法加载环境变量

Gro*_*ler 4 php environment-variables

我正在为我的 php 应用程序使用php dotenv作为环境变量。

自述文件说我可以加载php dotenv到我的应用程序中:

$dotenv = new Dotenv\Dotenv(__DIR__);
$dotenv->load();
Run Code Online (Sandbox Code Playgroud)

当我尝试登录时,出现 500 错误。我尝试使用var_dump我的$dotenvvar 来查看它包含的内容,但我什么也没得到。我是否错误地包括了这个?

/php/DbConnect.php:

<?php
$dotenv = new Dotenv\Dotenv(__DIR__);
$dotenv->load();

$DB_HOST = getenv('DB_HOST');
$DB_USERNAME = getenv('DB_USERNAME');
$DB_PASSWORD = getenv('DB_PASSWORD');
$DB_DATABASE = getenv('DB_DATABASE');
Run Code Online (Sandbox Code Playgroud)

我的 root/composer.json 文件:

{
    "require": {
        "vlucas/phpdotenv": "^2.0"
    }
}
Run Code Online (Sandbox Code Playgroud)

我的 phpdotenv 供应商文件是:

  • 根/供应商/vlucas/phpdotenv/src/Dotenv.php
  • 根/供应商/vlucas/phpdotenv/src/Loader.php
  • 根/供应商/vlucas/phpdotenv/src/Validator.php

在我的 root/php/DbConnect.php 文件中:

<?php
require 'vendor/autoload.php';

require 'vendor/vlucas/phpdotenv/src/Dotenv.php';
require 'vendor/vlucas/phpdotenv/src/Loader.php';
require 'vendor/vlucas/phpdotenv/src/Validator.php';
$dotenv = new Dotenv\Dotenv(__DIR__);
$dotenv->load();

$DB_HOST = getenv('DB_HOST');
    ...
Run Code Online (Sandbox Code Playgroud)

我包括正确吗?

Mr.*_*. J 5

请注意,DotENV文档不建议使用getenv()putenv()。相反,你应该使用$_ENV['EXAMPLEVAR']

所以这是现在正确的方法:

require 'vendor/autoload.php';

$dotenv = new Dotenv\Dotenv(__DIR__);
$dotenv->load();

$DB_HOST = $_ENV['DB_HOST'];
Run Code Online (Sandbox Code Playgroud)


小智 5

使用getenvputenv不是线程安全的。您应该使用$_ENV['DB_HOT']$_SERVER['DB_HOST']。但是,如果您仍然需要使用这些功能,您可以使用createUnsafeImmutable静态方法。所以代码将是

$dotenv = Dotenv\Dotenv::createUnsafeImmutable(__DIR__);
$dotenv->load();

$DB_HOST = getenv('DB_HOST');
Run Code Online (Sandbox Code Playgroud)


小智 1

我知道这已经是 6 个月前的事了,但您不需要 include/require,因为“phpdotenv”正在加载 Dotenv 命名空间。检查composer目录中的供应商目录自动加载的内容。

所以你需要的是:

require 'vendor/autoload.php';

$dotenv = new Dotenv\Dotenv(__DIR__);
$dotenv->load();

$DB_HOST = getenv('DB_HOST');
Run Code Online (Sandbox Code Playgroud)

还要确保 load() 方法可以找到您的 .env 文件,如果名称不同,请将文件名传递给 load() 方法。在此处查看文档: https: //github.com/vlucas/phpdotenv 的“使用”部分。