这是代码:
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”)。
答案 0 :(得分:4)
它不会打印$_SERVER
,而是打印$_ENV
。环境变量设置为Web服务器,这就是您在打印$_ENV
时看到的原因。正如$_ENV
documentation中所述,它说:
通过传递给当前脚本的关联变量数组 环境方法。
这些变量从中导入PHP的全局命名空间 PHP解析器运行的环境。提供了许多 由运行PHP的shell和不同的系统 可能运行不同类型的shell,最终列表是 不可能。请参阅shell的文档以获取列表 定义的环境变量。
其他环境变量包括放置在那里的CGI变量 无论PHP是作为服务器模块还是CGI运行 处理器。
首次执行脚本时会设置这些值。当您致电setenv()
时,这些值不会自动添加到$_ENV
。您必须手动添加它们或使用getenv()
功能。
答案 1 :(得分:1)
是否启用了safe_mode?如果是这样,您可能只能设置某些变量。请参阅php.net上的this documentation of putenv。