발견된 문제
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에서 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 중국어 웹사이트의 관련 기사를 참고하세요!
관련 기사:
에서 명명된 경로 사용