无法在PHP中设置环境变量

时间:2011-07-18 03:52:01

标签: php environment-variables

这是代码:

putenv("LC_ALL=ru_RU.utf8");
print_r($_ENV) . PHP_EOL;
echo getenv('LC_ALL') . PHP_EOL;

我得到以下回复:

Array (
[USER] => www-data
[HOME] => /var/www
[FCGI_ROLE] => RESPONDER
[QUERY_STRING] =>
[REQUEST_METHOD] => GET
[CONTENT_TYPE] =>
[CONTENT_LENGTH] =>
[SCRIPT_FILENAME] => /var/www/cms/public/index.php
[SCRIPT_NAME] => /index.php
[REQUEST_URI] => /backend/users
[DOCUMENT_URI] => /index.php
[DOCUMENT_ROOT] => /var/www/cms/public
[SERVER_PROTOCOL] => HTTP/1.1
[GATEWAY_INTERFACE] => CGI/1.1
[SERVER_SOFTWARE] => nginx/1.0.2
[REMOTE_ADDR] => 127.0.0.1
[REMOTE_PORT] => 48644
[SERVER_ADDR] => 127.0.0.1
[SERVER_PORT] => 80
[SERVER_NAME] => cmsdev.com
[REDIRECT_STATUS] => 200
[PATH_INFO] => /index.php
[HTTP_HOST] => cmsdev.com
[HTTP_USER_AGENT] => Mozilla/5.0 (
X11; Linux x86_64; rv:5.0
) Gecko/20100101 Firefox/5.0
[HTTP_ACCEPT] => text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
[HTTP_ACCEPT_LANGUAGE] => ru,en-us;q=0.7,en;q=0.3
[HTTP_ACCEPT_ENCODING] => gzip, deflate
[HTTP_ACCEPT_CHARSET] => ISO-8859-1,utf-8;q=0.7,*;q=0.7
[HTTP_CONNECTION] => keep-alive
[HTTP_COOKIE] => PHPSESSID=ipsldis425a3pitimet7uehaa7; locale=ru_RU; timezone=%7B%22name%22%3A%22UTC%2B0%22%2C%22offset%22%3A0%7D
[HTTP_CACHE_CONTROL] => max-age=0
)

ru_RU.utf8 

所以 - 它看起来像$ _GET - 它打印$ _SERVER并且它不包含LC_ALL。有线索吗? (variables_order =“EGPCS”)。

2 个答案:

答案 0 :(得分:4)

它不会打印$_SERVER,而是打印$_ENV。环境变量设置为Web服务器,这就是您在打印$_ENV时看到的原因。正如$_ENV documentation中所述,它说:

  

通过传递给当前脚本的关联变量数组   环境方法。

     

这些变量从中导入PHP的全局命名空间   PHP解析器运行的环境。提供了许多   由运行PHP的shell和不同的系统   可能运行不同类型的shell,最终列表是   不可能。请参阅shell的文档以获取列表   定义的环境变量。

     

其他环境变量包括放置在那里的CGI变量   无论PHP是作为服务器模块还是CGI运行   处理器。

首次执行脚本时会设置这些值。当您致电setenv()时,这些值不会自动添加到$_ENV。您必须手动添加它们或使用getenv()功能。

这也记录在putenv documentation comments

答案 1 :(得分:1)

是否启用了safe_mode?如果是这样,您可能只能设置某些变量。请参阅php.net上的this documentation of putenv