getenv()始终返回false。我正在使用Symfony dotenv库,并从项目根目录下的.env文件加载变量。
use Symfony\Component\Dotenv\Dotenv;
use Symfony\Component\Dotenv\Exception\PathException;
if (!getenv('APP_ENV')) {
try {
(new Dotenv())->load(__DIR__ . '/../.env');
} catch (PathException $ex) {
echo $ex->getMessage();
exit(1);
}
}
var_dump(getenv('APP_ENV')); // bool(false)但是当我转储超级全局变量时,我可以看到我的变量
var_dump($_ENV); // array:1["APP_ENV" => "dev"]那么我错过了什么呢?
发布于 2021-01-10 19:15:35
我没有使用symfony,但我在使用vlucas库时遇到了一些问题,这是我的第一个导致问题的代码。
define('BASE_PATH',realpath(__DIR__.'/../../'));
require_once __DIR__.'/../../vendor/autoload.php';
$dotEnv = Dotenv\Dotenv::createImmutable(BASE_PATH);
$dotEnv->load();
$appName=$_ENV['APP_NAME'];
$appName2=getenv('APP_NAME'];
var_dump($appName) // return "This is my website";
var_dump($appName2) // return false;我一开始并不知道这个问题,但似乎是因为putenv()和getenv()不是线程安全的
所以我把它改成了这个代码
define('BASE_PATH',realpath(__DIR__.'/../../'));
require_once __DIR__.'/../../vendor/autoload.php';
$dotEnv = Dotenv\Dotenv::createUnsafeImmutable(BASE_PATH);// <======== :) look here
$dotEnv->load();
$appName=$_ENV['APP_NAME'];
$appName2=getenv('APP_NAME'];
var_dump($appName) // return "This is my website";
var_dump($appName2) // return "This is my website";我希望这能解决你的问题
发布于 2020-09-09 22:41:06
默认情况下,Symfony不使用putenv() (我认为这是出于安全原因,不太记得了),所以如果您使用Symfony的“伪”环境变量,则不能直接使用getenv()。
在我看来,最好的解决方案是使用依赖注入。您可以在Symfony配置中访问env vars。例如,使用yaml配置文件:
framework:
secret: '%env(APP_SECRET)%'如果你想使用getenv(),出于多种原因,我不推荐使用getenv(),可以这样做:
Symfony 5.1之前的公共配置:在新的Dotenv(true)
编辑:
使用putenv PHP函数的
发布于 2021-05-16 16:55:17
对于Symfony 5.x+,在public/index.php中
替换
(new Dotenv())->bootEnv(dirname(__DIR__).'/.env');使用
(new Dotenv())->usePutenv()->bootEnv(dirname(__DIR__).'/.env');这对我很有效。
https://stackoverflow.com/questions/63813272
复制相似问题