php – dotenv在生产时需要.env文件

前端之家收集整理的这篇文章主要介绍了php – dotenv在生产时需要.env文件前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用dotenv for PHP来管理环境设置(不是lavarel,但我标记了它因为lavarel也使用了dotenv)

我已从代码库中排除了.env,并为所有其他协作者添加了.env.example

在dotenv的github页面上:

PHPdotenv is made for development environments,and generally should not be used in production. In production,the actual environment variables should be set so that there is no overhead of loading the .env file on each request. This can be achieved via an automated deployment process with tools like Vagrant,chef,or Puppet,or can be set manually with cloud hosts like PagodaBox and Heroku.

我不明白的是我得到以下异常:

PHP致命错误:未捕获异常’InvalidArgumentException’,消息’Dotenv:环境文件.env未找到或无法读取.

这与文档说“应该设置实际环境变量以便在每个请求上加载.env文件没有开销”相矛盾.

所以问题是,如果有任何理由为什么dotenv抛出异常和/或我错过了什么?首先,与其他dotenv库(ruby)相比,行为是不同的

我可以轻松地解决这个问题,这是一个不太好的解决方案:

if(getenv('APPLICATION_ENV') !== 'production') { /* or staging */
    $dotenv = new Dotenv\Dotenv(__DIR__);
    $dotenv->load();
}

我认为最好的解决方案,但我认为dotenv应该处理这个问题.

$dotenv = new Dotenv\Dotenv(__DIR__);
//Check if file exists the same way as dotenv does it
//See classes DotEnv\DotEnv and DotEnv\Loader
//$filePath = $dotenv->getFilePath(__DIR__); 
//This method is protected so extract code from method (see below)

$filePath = rtrim(__DIR__,DIRECTORY_SEPARATOR).DIRECTORY_SEPARATOR . '.env';
//both calls are cached so (almost) no performance loss
if(is_file($filePath) && is_readable($filePath)) {
    $dotenv->load();
}
Dotenv是围绕一个想法构建的,它只会在开发环境中使用.因此,它总是希望存在.env文件.

您不喜欢的解决方案是使用Dotenv的推荐方法.似乎是won’t change in near future.项目问题跟踪器中的相关讨论:https://github.com/vlucas/phpdotenv/issues/63#issuecomment-74561880

请注意,Mark offers有一个很好的生产/登台环境方法,它可以跳过文件加载,但不会验证

$dotenv = new Dotenv\Dotenv();
if(getenv('APP_ENV') === 'development') {
    $dotenv->load(__DIR__);
}
$dotenv->required('OTHER_VAR');

猜你在找的PHP相关文章