php 7 $ _ENV&& getenv()为EGPCS设置为空

时间:2016-08-22 11:09:11

标签: php apache centos7 php-7

我的服务器有以下设置,

  

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

做错了什么

1 个答案:

答案 0 :(得分:1)

PHP的环境与您在shell中使用的用户环境隔离开来。这是设计使然,因为PHP要求您将变量显式导入其环境。它不会隐含地这样做,因为这可能是一个巨大的安全风险。

From the manual

  

这些变量从运行PHP解析器的环境导入到PHP的全局命名空间中。许多是由运行PHP的shell提供的,并且不同的系统可能运行不同类型的shell,不可能有明确的列表。有关已定义环境变量的列表,请参阅shell的文档。

因此,为了将环境变量加载到PHP中,必须在加载PHP解释器的进程级别执行此操作。例如,在Apache httpd中,使用mod_php,这可以通过在apache.conf或虚拟主机文件中指定SetEnv指令来完成。

对于PHP-FPM,这将在您的池配置文件中完成,如env[myTestDir] = "/home/myuser"