我使用Elastic Beanstalk在AWS EC2服务器上托管我的PHP项目。我使用php dotenv
设置了我的ENV Vars,这似乎可以从我的根.env
文件中获得我的vars:
DbConnect.php:
require '../vendor/autoload.php';
$dotenv = new Dotenv($_SERVER['DOCUMENT_ROOT']);
$dotenv->load();
$DB_HOST = getenv('DB_HOST');
$DB_USERNAME = getenv('DB_USERNAME');
$DB_PASSWORD = getenv('DB_PASSWORD');
$DB_DATABASE = getenv('DB_DATABASE');
$mysqli = new mysqli($DB_HOST, $DB_USERNAME, $DB_PASSWORD, $DB_DATABASE);
因此,在AWS管理控制台中,我在软件配置,git推送和重新部署中设置了相同的名称ENV vars。我得到500错误,因为EC2 ENV变速器似乎没有发现。
我还需要做些什么吗?
更新
eb printenv
显示了正确的env var值。
答案 0 :(得分:5)
来自https://github.com/vlucas/phpdotenv
phpdotenv是针对开发环境而制定的,通常应该 不能用于生产。在生产中,实际环境 应该设置变量,以便没有加载的开销 每个请求都有.env文件。这可以通过自动化实现 使用Vagrant,chef或Puppet等工具进行部署过程,或者可以 使用Pagodabox和Heroku等云主机手动设置。
如果您没有.env文件,则会出现php致命错误
致命错误:未捕获的异常 ' Dotenv \异常\ InvalidPathException'有消息'无法阅读 /home/vagrant/Code/project/.env.'中的环境文件;在 /home/vagrant/Code/project/vendor/vlucas/phpdotenv/src/Loader.php on 第75行
如果你愿意的话
以下是您可以设置Environment Variable
进行检查的示例代码,如果它位于本地/测试环境中,则仅加载 Dotenv 类
if(getenv('APP_ENV') === 'local' || getenv('APP_ENV') === 'testing')
{
$dotenv = new Dotenv\Dotenv(__DIR__);
$dotenv->load();
}
或者另一种方法是检查.env文件是否存在
$filePath = rtrim(__DIR__, DIRECTORY_SEPARATOR).DIRECTORY_SEPARATOR . '.env';
if(is_file($filePath) && is_readable($filePath))
{
$dotenv = new Dotenv\Dotenv(__DIR__);
$dotenv->load();
}