getenv () 대 PHP에서 $ _ENV
getenv()
과 의 차이점은 무엇입니까 $_ENV
?
둘 중 하나를 사용하는 것 사이의 장단점이 있습니까?
나는 때때로 getenv()
내게 필요한 것을 제공하지만 $_ENV
그렇지 않은 경우 (예 :)를 발견했습니다 HOME
.
getenv 에 대한 PHP 문서에 따르면 getenv
대소 문자를 구분하지 않는 방식으로 변수를 찾는 것을 제외하고는 정확히 동일 합니다. 대부분의 경우 문제가되지는 않지만 문서의 주석 중 하나는 다음과 같이 설명합니다.
예를 들어 Windows에서 $ _SERVER [ 'Path']는 예상대로 'PATH'가 아니라 첫 글자가 대문자로 표시되는 것과 같습니다.
따라서 getenv
검색하려는 변수 제목의 대 / 소문자가 확실하지 않으면 사용하기로 선택할 것입니다 .
나는 문서의 주석 getenv
이 대소 문자를 구분하지 않는다는 것을 알고 있지만 내가 보는 행동 은 아닙니다 .
> env FOO=bar php -r 'print getenv("FOO") . "\n";'
bar
> env FOO=bar php -r 'print getenv("foo") . "\n";'
> env foo=bar php -r 'print getenv("foo") . "\n";'
bar
> env foo=bar php -r 'print getenv("FOO") . "\n";'
> php --version
PHP 5.4.24 (cli) (built: Jan 24 2014 03:51:25)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies
보면 소스 코드 에 대한 getenv
PHP 환경 변수를 가져올 수있는 세 가지 방법이 있기 때문에 기능이 있습니다 :
- Via
sapi_getenv
(예 : Apache에서 환경 변수를 가져 오는 경우) - Windows의 경우
GetEnvironmentVariableA
. - 비 Windows에서에서 만약
getenv
에 의해 제공되는 기능libc
.
내가 알 수있는 한 대소 문자를 구분하지 않는 방식으로 작동하는 유일한 시간은 Windows 환경 변수 API가 작동하는 방식이기 때문에 Windows에서만 작동합니다. Linux, BSD, Mac 등을 사용하는 getenv
경우 여전히 대소 문자를 구분합니다.
mario 에서 언급했듯이의 $_ENV
구성이 다르기 때문에 항상 채워지는 것은 아니므로 서버 구성을 제어하지 않는 경우 variables_order
피하는 것이 가장 좋습니다 $_ENV
.
따라서 가장 이식성이 뛰어난 PHP 코드의 경우 :
- 사용
getenv
. - 환경 변수 이름에 올바른 대소 문자를 사용하십시오.
또한 $_ENV
경우 일반적으로 비어 variables_order
does't가있다 E
나열. 많은 설정에서 만 $_SERVER
채워질 가능성이 높으며 $_ENV
CLI 사용을위한 것입니다.
반면에 getenv()
환경에 직접 액세스합니다.
(대소 문자의 모호성에 관해서는 array_change_key_case()
.)
내가 발견 getenv()
것을 방지하는 데 유용 이상한 PHP 버그 곳 때때로을 $_SERVER
하고 $_ENV
있는 경우 정의되지 않은 한 auto_globals_jit
활성화되었다합니다 (생성 _SERVER 및 _ENV의 그들이 먼저 사용 할 때 변수). 그 이후로 나는 그것을 사용하기 시작했습니다.
이 함수 (비교 유용한
$_SERVER
,$_ENV
그것은 그 배열 대소 문자 구별하게 $ varname에 키를 검색하기 때문에). 예를 들어 Windows$_SERVER['Path']
에서는PATH
예상대로 ' '가 아니라 대문자로 표시되는 것과 같습니다 . 그래서 그냥:<?php getenv('path') ?>
함수로서 테스트 목적으로 오버로드 될 수 있기 때문에 getenv ()가 더 나은 선택이라고 덧붙였습니다. $ _SERVER 또는 $ _ENV 변수를 덮어 쓰면 테스트 프레임 워크 및 기타 라이브러리를 방해 할 수 있으며 궁극적으로 안전하게 수행하려면 더 많은 작업이 필요합니다.
참고 URL : https://stackoverflow.com/questions/8798294/getenv-vs-env-in-php
'Development Tip' 카테고리의 다른 글
JSDoc에서 개방형 인수 함수를 문서화하는 올바른 방법 (0) | 2020.10.26 |
---|---|
Maven 3 및 JUnit 4 컴파일 문제 : org.junit 패키지가 없습니다. (0) | 2020.10.26 |
keytool을 사용하여 PKCS12 키 저장소에 저장된 인증서를 나열하는 방법은 무엇입니까? (0) | 2020.10.26 |
Android Studio에서 릴리스 Android 라이브러리 패키지 (aar)를 만드는 방법 (디버그 아님) (0) | 2020.10.26 |
URL이 존재하는지 또는 Java에서 404를 반환하는지 확인하는 방법은 무엇입니까? (0) | 2020.10.26 |