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 供应商文件是:
在我的 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)
我包括正确吗?
请注意,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
使用getenv和putenv不是线程安全的。您应该使用$_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 的“使用”部分。