无法在 PHP 中设置环境变量

Sta*_*ann 1 php environment-variables

这是代码:

putenv("LC_ALL=ru_RU.utf8");
print_r($_ENV) . PHP_EOL;
echo getenv('LC_ALL') . PHP_EOL;
Run Code Online (Sandbox Code Playgroud)

我得到以下回应:

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 
Run Code Online (Sandbox Code Playgroud)

所以 - 它看起来像而不是,$_GET - it prints $_SERVER它不包含LC_ALL. 有什么线索吗?( variables_order = "EGPCS").

Fra*_*nes 5

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

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

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

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

这些值是在第一次执行脚本时设置的。当您调用时setenv(),这些值不会自动添加到$_ENV. 您必须手动添加它们或使用该getenv()功能。

这也记录在putenv文档注释中