Amazon Linux环境下PHP无法获取/etc/environment配置的环境变量
解决Apache下PHP无法读取/etc/environment中环境变量的问题
问题背景
在Amazon Linux系统中,已通过vi /etc/environment配置环境变量ENV_TYPE=DEV,本地shell可正常获取该变量,但Apache部署的PHP应用(路径/var/www/html/index.php)通过getenv('ENV_TYPE')无法读取到变量,输出仅为env ,期望输出为env DEV。
解决方案
方法1:在Apache配置中显式设置或传递环境变量
Apache进程默认不会自动继承/etc/environment中的全部系统环境变量,需在其配置中声明:
- 编辑Apache主配置文件(如
/etc/httpd/conf/httpd.conf)或对应虚拟主机的配置文件,添加以下任一配置:- 直接设置变量值:
SetEnv ENV_TYPE DEV - 从系统环境变量中传递该变量:
PassEnv ENV_TYPE
- 直接设置变量值:
- 重启Apache服务使配置生效:
sudo systemctl restart httpd
方法2:让Apache启动时加载/etc/environment
修改Apache启动配置,确保其加载系统环境变量文件:
- 编辑
/etc/sysconfig/httpd文件,添加以下内容:
也可以直接在该文件中写入变量:. /etc/environmentENV_TYPE=DEV - 重启Apache服务:
sudo systemctl restart httpd
方法3:调整PHP的环境变量读取配置
确保PHP允许读取环境变量:
- 编辑PHP配置文件(通常为
/etc/php.ini),找到variables_order配置项,确保其包含E(代表环境变量):variables_order = "GPCS E" - 保存配置后重启Apache;也可以尝试使用
$_ENV['ENV_TYPE']替代getenv('ENV_TYPE')进行测试。
内容的提问来源于stack exchange,提问作者PRADEEP M
相关产品推荐
相关产品推荐

