我的服务器有以下设置,
ec2 - > centos7
httpd 2.4 <FilesMatch \.php$> SetHandler "proxy:fcgi://127.0.0.1:9000" </FilesMatch> php 7 -> php.ini variables_order=EGPCS
和ENV var设置在centos中
导出myTestDir = / home / myuser
[myUser@.....]$ echo $myTestDir /home/myuser
然而,我无法在php中获得任何系统ENV var。
echo exec('whoami'); // returns -> myUser
$_SESSION['test1']=$_SERVER['myTestDir']; // returns -> null
$_SESSION['test2']=$_ENV['myTestDir']; // returns -> null
$_SESSION['test3']=getenv("myTestDir"); // returns -> false
我错过了额外的步骤或对variables_order=EGPCS
答案 0 :(得分:1)
PHP的环境与您在shell中使用的用户环境隔离开来。这是设计使然,因为PHP要求您将变量显式导入其环境。它不会隐含地这样做,因为这可能是一个巨大的安全风险。
这些变量从运行PHP解析器的环境导入到PHP的全局命名空间中。许多是由运行PHP的shell提供的,并且不同的系统可能运行不同类型的shell,不可能有明确的列表。有关已定义环境变量的列表,请参阅shell的文档。
因此,为了将环境变量加载到PHP中,必须在加载PHP解释器的进程级别执行此操作。例如,在Apache httpd中,使用mod_php,这可以通过在apache.conf或虚拟主机文件中指定SetEnv
指令来完成。
对于PHP-FPM,这将在您的池配置文件中完成,如env[myTestDir] = "/home/myuser"