$_ENV가 비어 있는 이유는 무엇입니까?

나는 달리고 있다Apache/2.2.11 (Win32) PHP/5.3.0.htaccess 파일에서 다음 작업을 수행했습니다.

SetEnv FOO bar 

인쇄를 하면$_ENVPHP 파일의 변수에서 빈 배열이 표시됩니다.환경변수가 표시되지 않는 이유는 무엇입니까?애초에 왜 비어있지?

변수를 찾긴 했지만, 이 변수가$_SERVER변수.그리고 어떤 이유에선지 두 번 정도 나타납니다.왜 이러한가?

[REDIRECT_FOO] => bar [FOO] => bar 

다음 방법으로 얻을 수 있을 것 같습니다.getenv('FOO')그래서 그걸 대신 써야 할 것 같아요.하지만 나는 아직도 무엇이 이것을 야기하는지 조금 궁금하다.이것은 Windows의 문제입니까?아니면 무슨 일이야?



질문에 대한 답변



여기에는 두 가지 문제가 있었습니다.

1.은 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" 

내가 등을 돌렸을 때EGPCS,$_ENV더 이상 비어있지 않습니다.

2. 에서 사용하면가 아닌 끝납니다.이름을 붙이면 조금 헷갈립니다.SetEnv

# .htaccess SetEnv ENV dev SetEnv BASE /ssl/
# php var_dump($_SERVER['ENV'], $_SERVER['BASE']);
// string 'dev' (length=3) // string '/ssl/' (length=5) 

3. 함수는 항상 동작하며 $_ENV에 대한 PHP 설정의 영향을 받지 않습니다.게다가 대소문자를 구분하지 않는 것 같아서 편리할 수 있습니다.

var_dump(getenv('os'), getenv('env'));
// string 'Windows_NT' (length=10) // string 'dev' (length=3) 



$_ENV 변수는 PHP가 실행되고 있는 환경에서 Import되며, 설정(OS, 서버, PHP가 Apache 모듈로 실행되는지, Fast CGI에서 실행되는지 등)에 따라 크게 달라질 수 있습니다.

Windows 에서의 표준 Apache+mod_php 인스톨의 IIRC, 변수를 변경하는 유일한 방법$_ENV는 Windows 환경변수를 변경하는 것입니다( 참조).이는 Windows에서 PHP 확장을 다룰 때 중요할 수 있습니다. 왜냐하면 일부 확장 기능(예: )은 환경 변수를 통해서만 구성할 수 있기 때문입니다.$_ENV.




REDIRECT_*변수는 RewriteRules를 사용하는 경우 표시됩니다.내 서버에도 똑같이 표시됩니다.Fast CGI에서 실행되는 것과 관련이 있을 수 있습니다.또한 suexec과 결합할 경우 전체 환경 변수 풀이 정리될 가능성이 높습니다.복구하기 위해 추가 구성이 필요할 수 있습니다.PassEnv특히.getenv()가 당신에게 적합한 이유에 대해서는 잘 모르겠습니다.그러나 모든 현상은 서버와 php 설정에 따라 다릅니다.서버 장애에 대해 물어보면 알 수 있을 겁니다.