PHP 개발 중에 환경 변수는 데이터베이스 연결 정보, API 키, 운영 모드 (예 : 개발 또는 생산 ) 등을 저장하는 데 종종 사용되는 매우 일반적인 구성 방법입니다.
이 기사는 PHP의 putenv () 기능을 사용하여 환경 변수를 합리적으로 설정하고 충돌을 피하며 응용 프로그램 안정성과 유지 관리를 유지하는 방법을 설명합니다.
PHP Putenv (String $ 할당) : BOOL 함수는 현재 프로세스의 환경 변수 표에 환경 변수를 추가, 수정 또는 삭제하는 데 사용됩니다. 시스템 환경에서 직접 작용하고 전 세계적으로 효과적이며 (프로세스 수준) CLI 및 FPM 모드에 적합합니다.
예:
<span><span><span class="hljs-title function_ invoke__">putenv</span></span><span>(</span><span><span class="hljs-string">"APP_ENV=production"</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">getenv</span></span><span>(</span><span><span class="hljs-string">"APP_ENV"</span></span><span>); </span><span><span class="hljs-comment">// 산출 production</span></span><span>
</span></span>여러 라이브러리는 동일한 변수 이름을 사용합니다 . 예를 들어, 여러 라이브러리는 API_Key를 사용하고 끝에있는 값은 이전의 값을 덮어 씁니다.
개발 및 생산 환경 구성 불일치 : .env 파일의 변수는 배포 중에 실수로 덮어 씁니다.
구성 파일은 실제 코드 설정으로 반복됩니다 . .env 파일의 변수 값은 putenv () 호출에 의해 수정되어 프로그램 동작이 변경됩니다.
프로젝트에 설정된 환경 변수에 대한 접두사는 타사 라이브러리와의 충돌을 효과적으로 피할 수 있습니다. 예를 들어:
<span><span><span class="hljs-title function_ invoke__">putenv</span></span><span>(</span><span><span class="hljs-string">"MYAPP_API_KEY=abc123"</span></span><span>);
</span></span>이런 식으로 다른 라이브러리가 있더라도 API_Key를 사용하고 서로 방해하지 않습니다.
변수를 설정하려면 putenv ()를 호출하기 전에 GetEnv ()를 사용하여 기존 값을 실수로 덮어 쓰는 것을 피하기 위해 변수가 이미 존재하는지 확인하십시오.
<span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">getenv</span></span><span>(</span><span><span class="hljs-string">'MYAPP_API_KEY'</span></span><span>) === </span><span><span class="hljs-literal">false</span></span><span>) {
</span><span><span class="hljs-title function_ invoke__">putenv</span></span><span>(</span><span><span class="hljs-string">'MYAPP_API_KEY=abc123'</span></span><span>);
}
</span></span>이 방법은 외부 구성 (예 : 시스템 환경 변수, 컨테이너 주입 변수)의 사용에 대한 우선 순위를 정하는 데 적합하며 크게 쓰지 않습니다.
환경 변수 설정은 툴 기능 을 통해 균일하게 관리됩니다. 예를 들어:
<span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">set_env_var</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-keyword">string</span></span></span><span> </span><span><span class="hljs-variable">$key</span></span><span>, </span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$value</span></span><span>, </span><span><span class="hljs-keyword">bool</span></span><span> </span><span><span class="hljs-variable">$overwrite</span></span><span> = </span><span><span class="hljs-literal">false</span></span><span>): </span><span><span class="hljs-title">void</span></span><span> {
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$overwrite</span></span><span> || </span><span><span class="hljs-title function_ invoke__">getenv</span></span><span>(</span><span><span class="hljs-variable">$key</span></span><span>) === </span><span><span class="hljs-literal">false</span></span><span>) {
</span><span><span class="hljs-title function_ invoke__">putenv</span></span><span>(</span><span><span class="hljs-string">"<span class="hljs-subst">{$key}</span></span></span><span>=</span><span><span class="hljs-subst">{$value}</span></span><span>");
}
}
</span></span>사용시 :
<span><span><span class="hljs-title function_ invoke__">set_env_var</span></span><span>(</span><span><span class="hljs-string">'MYAPP_DB_HOST'</span></span><span>, </span><span><span class="hljs-string">'localhost'</span></span><span>);
</span></span>이 포장은 또한 향후 환경 가변 관리에 대한보다 복잡한 확장을 촉진합니다.
vlucas/phpdotenv 와 같은 인기있는 도구를 사용하여 .env 파일을 읽고 덮어 쓰기 동작을 제한하십시오. 예를 들어:
<span><span><span class="hljs-variable">$dotenv</span></span><span> = </span><span><span class="hljs-title class_">Dotenv\Dotenv</span></span><span>::</span><span><span class="hljs-title function_ invoke__">createImmutable</span></span><span>(</span><span><span class="hljs-keyword">__DIR__</span></span><span>, </span><span><span class="hljs-literal">null</span></span><span>, </span><span><span class="hljs-literal">false</span></span><span>);
</span><span><span class="hljs-variable">$dotenv</span></span><span>-></span><span><span class="hljs-title function_ invoke__">safeLoad</span></span><span>();
</span></span>Safeload ()는 변수가 이미 존재할 때 덮어 쓰기를 건너 뜁니다. 컨테이너 배포 및 CI/CD 프로세스에서 가변 주입을 보호하는 데 적합합니다.
환경 변수 오버레이는 특히 여러 팀과 협력하고 많은 타사 라이브러리를 사용하는 프로젝트에서 간과하기 쉬운 문제입니다. putenv () 함수를 사용하여 네임 스페이스 접두사를 추가하고, 설정 논리를 캡슐화하고, 불필요한 덮어 쓰기를 피하면 응용 프로그램 동작을 더 잘 제어하고 구성 오류로 인한 버그를 피할 수 있습니다.
환경 변수는 전체 애플리케이션 구성의 "루트"라는 점을 항상 기억하고 작동 할 때 더욱 신중해야합니다.