為什麼apache httpd.conf中SetEnv設定的環境變數無法傳遞給php?

為什麼apache httpd.conf中SetEnv設定的環境變數無法傳遞給php?

我在httpd.conf中設定了一個環境變數:

SetEnv http_proxy "http://localhost:3128"

但我無法使用以下方法在 php 中取得此變數getenv

<?php
echo getenv("http_proxy");
phpinfo();
print_r($_ENV);

getenv返回空並print_r($_ENV)顯示以下內容:

Array ( [LANG] => C [PATH] => /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin [NOTIFY_SOCKET] => /run/systemd/notify ) 

有趣的是,環境變數顯示在輸出的「Apache 環境」部分下phpinfo

(我的系統是apache 2.4/php 5.6/CentOS7)

答案1

PHP5.6有蜜蜂不支援的 3年現在。升級到目前版本現在!然後,更改以下內容:

使用SetEnv HTTP_PROXY "http://localhost:3128"- 環境變數區分大小寫。

用於getenv(varname: "HTTP_PROXY", local_only: true)從伺服器環境請求變數。

如果您沒有明確指定僅接收局部變數,您將從 fastcgi 取得結果,因此對於以HTTP_該開頭的 varname 可以改為危險地混淆不安全代碼帶有標題並且是默默地丟棄。選擇退出 SAPI 行為是記錄在 getenv() 函數描述中

如果 PHP 運行在 SAPI(例如 Fast CGI)中,則函數將始終傳回 SAPI 設定的環境變數的值,即使已使用 putenv() 設定同名的本機環境變數。使用 local_only 參數傳回本地設定的環境變數的值。

相關內容