나는 실행 중이며 Apache/2.2.11 (Win32) PHP/5.3.0
.htaccess 파일에서 다음을 수행했습니다.
SetEnv FOO bar
$_ENV
PHP 파일에서 변수를 출력 하면 빈 배열이 생깁니다. 내 환경 변수가 표시되지 않는 이유는 무엇입니까? 왜 처음에는 비어 있습니까?
그래도 내 변수를 찾았지만 $_SERVER
변수에 나타납니다 . 그리고 어떤 이유로 두 번 나타납니다. 왜 이런거야?
[REDIRECT_FOO] => bar
[FOO] => bar
을 사용하여 얻을 수있는 것처럼 보이 getenv('FOO')
므로 대신 사용하는 것이 좋습니다. 그러나 나는 여전히 이것이 원인이 무엇인지 조금 궁금합니다. Windows 문제입니까? 아니면 무슨 일이 일어나고 있습니까?
답변
여기에 두 가지 문제가 있음이 밝혀졌습니다.
1. $_ENV
php.ini가 허용하는 경우에만 채워집니다. 기본적으로는 그렇지 않은 것 같습니다. 적어도 기본 WAMP 서버 설치 에서는 그렇지 않습니다 .
; This directive determines which super global arrays are registered when PHP
; starts up. If the register_globals directive is enabled, it also determines
; what order variables are populated into the global space. G,P,C,E & S are
; abbreviations for the following respective super globals: GET, POST, COOKIE,
; ENV and SERVER. There is a performance penalty paid for the registration of
; these arrays and because ENV is not as commonly used as the others, ENV is
; is not recommended on productions servers. You can still get access to
; the environment variables through getenv() should you need to.
; Default Value: "EGPCS"
; Development Value: "GPCS"
; Production Value: "GPCS";
; http://php.net/variables-order
variables_order = "GPCS"
내가 설정 한 경우 variables_order
에 다시 EGPCS
, $_ENV
더 이상 빈 없습니다.
당신이 사용하는 경우 2. SetEnv
당신에 .htaccess
, 그것에서 끝나는 $_SERVER
되지에서$_ENV
, 내가 말할 돼있는이 이름을 때 혼란 태드입니다 SetEnv
…
# .htaccess
SetEnv ENV dev
SetEnv BASE /ssl/
# php
var_dump($_SERVER['ENV'], $_SERVER['BASE']);
// string 'dev' (length=3)
// string '/ssl/' (length=5)
3.이 getenv
함수는 항상 작동하며 $ _ENV에 대한 PHP 설정의 영향을받지 않습니다. 또한 대소 문자를 구분하지 않는 것처럼 보이므로 유용 할 수 있습니다.
var_dump(getenv('os'), getenv('env'));
// string 'Windows_NT' (length=10)
// string 'dev' (length=3)
답변
답변
REDIRECT_*
RewriteRules를 사용하는 경우 변수가 나타납니다. 내 서버에서도 그들은 그렇게 나타납니다. FastCGI에서 실행하는 것과 관련이있을 수 있습니다. 그리고 suexec와 결합하면 전체 환경 변수 풀을 정리할 가능성이 가장 높습니다. PassEnv
특히 다시 가져 오기 위해 추가 구성이 필요할 수 있습니다 . getenv ()가 왜 작동하는지에 대해서는 단서가 없습니다. 그러나 모든 현상은 서버 및 PHP 구성에 따라 다릅니다. 서버 오류에 대해 물어보십시오.