PHP DOTENV无法加载环境变量

a64a0gku  于 11个月前  发布在  PHP
关注(0)|答案(3)|浏览(131)

我正在为我的php应用程序使用php dotenv for env vars。
自述文件说我可以通过以下方式将php dotenv加载到应用程序中:

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

字符串
当我尝试登录时,我得到一个500错误。我尝试var_dump ing我的$dotenv var来查看它包含什么,但我什么也没有得到。我是不是算错了?
/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');


我的root/composer.json文件:

{
    "require": {
        "vlucas/phpdotenv": "^2.0"
    }
}


我的phpdotenv供应商文件是:

  • root/vendor/vlucas/phpdotenv/src/Dotenv.php
  • root/vendor/vlucas/phpdotenv/src/Loader.php
  • root/vendor/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');
    ...


我算对了吗?

r1wp621o

r1wp621o1#

请注意,docs for DotENV不建议使用getenv()putenv()。您应该使用$_ENV['EXAMPLEVAR']
现在这是正确的方法:

require 'vendor/autoload.php';

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

$DB_HOST = $_ENV['DB_HOST'];

字符串
在新版本中:

require 'vendor/autoload.php';
    
# $dotenv = new Dotenv\Dotenv(__DIR__);
# Replaced by following line
$dotEnv = Dotenv\Dotenv::createImmutable(__DIR__);
# and then rest of code as normal
$dotenv->load();

$DB_HOST = $_ENV['DB_HOST'];

nzrxty8p

nzrxty8p2#

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

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

$DB_HOST = getenv('DB_HOST');

字符串

mmvthczy

mmvthczy3#

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

require 'vendor/autoload.php';

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

$DB_HOST = getenv('DB_HOST');

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

相关问题