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 ) 

興味深いことに、環境変数はphpinfo出力の「Apache 環境」セクションの下に表示されます。

(私のシステムは apache 2.4/php 5.6/CentOS7 です)

答え1

PHP の5.6には蜂がいるサポートされていない 3年間今すぐアップグレード現行版今すぐ!次に、次の内容を変更します。

使用SetEnv HTTP_PROXY "http://localhost:3128"- 環境変数では大文字と小文字が区別されます。

getenv(varname: "HTTP_PROXY", local_only: true)サーバー環境から変数を要求するために使用します。

ローカル変数のみを受け取るように明示的に指定しない場合は、代わりにfastcgiから結果が取得されるため、varnameがHTTP_次のように始まる場合は、代わりに危険なほどに安全でないコードを混乱させるヘッダー付きで黙って捨てられたSAPIの動作をオプトアウトすることはgetenv() 関数の説明に記載されている:

PHP が Fast CGI などの SAPI で実行されている場合、putenv() を使用して同じ名前のローカル環境変数が設定されている場合でも、この関数は常に SAPI によって設定された環境変数の値を返します。ローカルに設定された環境変数の値を返すには、local_only パラメータを使用します。

関連情報