我花了几个小时试图弄清楚如何将环境变量传递给 PHP CLI。我试过了:
- 在 ebextensions 配置中设置:
$ source /opt/elasticbeanstalk/support/envvars.d/sysenv
- 将我的所有环境变量设置为配置文件。
无论我尝试什么,环境变量都不会传递给 PHP CLI。
当我以 ec2-user 身份登录到我的 EC2 实例并执行以下操作时:$ echo $ENVIRONMENT 我得到prod。如果我使用$ sudo su 和$ echo $ENVIRONMENT 进行操作,我会得到prod。
如果我手动运行 PHP CLI 文件(用于 cronjob),我的脚本就可以工作。当它自动运行时(通过 cronjob)环境变量不会传递给我的脚本。
这就是我所做的。把它放在你的 cronjob 入口脚本中:
$variables = '/opt/elasticbeanstalk/support/envvars.d/sysenv';
if (file_exists($variables) && is_file($variables)) {
$contents = file_get_contents($variables);
foreach(explode("\n", $contents) as $line) {
if (empty($line)) continue;
$new_line = str_replace('export ', '', $line);
$first_part = strpos($new_line, '=');
$last_part = substr($new_line, $first_part, strlen($new_line));
$variable_value = str_replace(array('=', '"'), array('',''), $last_part);
$variable_name = substr($new_line, 0, $first_part);
putenv($variable_name."=".$variable_value);
}
}
它从/opt/elasticbeanstalk/support/envvars.d/sysenv 文件中提取每一行,删除export 部分,获取变量名称和值,并通过putenv() 函数设置它。