>  기사  >  php教程  >  Laravel이 env 함수를 사용하여 환경 변수를 null로 읽는 문제 살펴보기

Laravel이 env 함수를 사용하여 환경 변수를 null로 읽는 문제 살펴보기

高洛峰
高洛峰원래의
2017-03-24 15:11:452871검색

발견된 문제

Laravel 프로젝트에서 구성 파일을 캐시하기 위해 php artisan config:cache 명령을 실행하면 Tinker(Tinker는 Laravel과 함께 제공되는 대화형 명령줄 인터페이스입니다)에서 값이 env 함수를 사용하여 읽은 환경 변수는 null입니다. php artisan config:clear를 실행하여 구성 캐시를 지운 후에만 읽을 수 있습니다.

알아봅시다

.env 파일을 열어서 다음 파일이 귀중한지 확인하세요.

APP_ENV=local
APP_KEY=base64:JHE5bOkRg283uT0n1Zq/GgvGEer8ooYiB42/wIcCyvo=
APP_DEBUG=true
APP_LOG_LEVEL=debug
APP_URL=http://www.tanteng.me
  
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=tanteng.me
DB_USERNAME=homestead
DB_PASSWORD=secret


사진과 같습니다:

Laravel이 env 함수를 사용하여 환경 변수를 null로 읽는 문제 살펴보기

이유는 무엇인가요?

Laravel에서 php aritsan config:cache 명령을 실행하면 Laravel은 app/config 디렉터리의 모든 구성 파일을 bootstrap/cache/config.php의 캐시 구성 파일로 "컴파일"하고 통합합니다. 각 구성 파일은 여기에서 읽을 수 있는 env 함수를 통해 환경 변수를 읽을 수 있습니다. 하지만 이 캐시 구성 파일이 있으면 다른 곳에서 env 함수를 사용하여 환경 변수를 읽을 수 없으므로 null입니다.

이 코드, Illuminate/Foundation/Bootstrap/DetectEnvironment를 살펴보겠습니다.

public function bootstrap(Application $app)
{
 if (! $app->configurationIsCached()) {
 $this->checkForSpecificEnvironmentFile($app);
  
 try {
  (new Dotenv($app->environmentPath(), $app->environmentFile()))->load();
 } catch (InvalidPathException $e) {
  //
 }
 }
}

이 메서드는 프레임워크가 시작된 후에 실행됩니다. 이 코드는 캐시 구성 파일이 있는 경우 환경 변수가 설정되지 않고 구성이 캐시 구성 파일을 읽는다는 것을 보여줍니다. 더 이상 읽을 수 없습니다.

따라서 app/config 디렉토리의 다른 위치에서 구성 파일을 읽을 때 환경 변수를 읽기 위해 env 함수를 사용하지 마십시오. 이런 식으로 php artisan config:cache를 실행하면 env 함수가 작동하지 않습니다. . 사용할 모든 환경 변수는 app/config 디렉터리의 구성 파일에 있는 env를 통해 읽습니다. 다른 곳에서 환경 변수를 사용하는 경우 env 함수를 사용하는 대신 구성 파일을 균일하게 읽습니다.

요약

이 글의 내용이 모두의 공부나 업무에 조금이나마 도움이 되었으면 좋겠습니다. 소통하라는 메시지.

env 함수를 사용하여 null인 환경 변수를 읽는 Laravel에 대한 자세한 내용은 PHP 중국어 웹사이트의 관련 기사를 참고하세요!

관련 기사:

Laravel 프레임워크에서 {{url}}과 {{asset}}의 차이점은 무엇인가요?

laravel

Laravel 경로 리디렉션에 대한 참고 사항

에서 명명된 경로 사용
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.