Laravel 5-env ()는 항상 null을 반환합니다.


81

나는 왜 나의 env()도우미가 항상 돌아 오는지 알아 내려고 노력한다 null. 이로 인해 기본적으로 헬퍼가 널리 사용되는 app.php파일에서 특히 문제가 발생 합니다 env(). 신비한 서버 설정이 있습니까?

내 환경 파일 :

APP_ENV=production
APP_KEY=base64:mymagickey=
APP_DEBUG=false
APP_LOG_LEVEL=info
APP_URL=http://www.example.com

etc...

편집-다음 시도 :

php artisan cache:clear
php artisan view:clear
php artisan config:cache

그리고 물론 나는 env다음과 같은 도우미를 사용 하고 있습니다.env('APP_ENV')

그러나 여전히 성공하지 못했습니다. 이상한 부분은 $_ENVPHP 변수가 .env파일의 모든 단일 변수를 포함 한다는 것 입니다.

답변:


180

env(...)구성을 캐시 한 후에는 기능이 작동하지 않습니다. (laravel 5.2부터 현재 5.7까지)

Laravel 설명서를 말한다

config:cache배포 중에 명령을 사용하는 경우 env응용 프로그램의 다른 곳이 아닌 구성 파일 내 에서만 함수를 호출하는지 확인해야합니다 .

그래서 정답은

애플리케이션 내에서 env를 호출하는 경우 구성 파일에 적절한 구성 값을 추가하고 대신 해당 위치에서 env를 호출하여 env 호출을 구성 호출로 변환 할 수 있도록하는 것이 좋습니다.

그리고 같은 문서 에서 인용했습니다.

그러나 빠른 수정을 위해 다음을 수행합니다.

php artisan config:clear

그리고 이제 config:cache캐싱하기 전에 구성을 지워도 시도했을 때 왜 도움이되지 않았 는지 명확해야합니다 .


감사합니다 php artisan config:clear. AWS SES 자격 증명을 읽을 수있는 유일한 방법입니다.
Joe Scotto

3
그래서 우리는 env('APP_ENV') 우리의 응용 프로그램에서 와 같은 것을 직접 사용해서는 안됩니다 . 대신 config/app.php:에 줄을 써야합니다 'env' => env('APP_ENV'),. 그런 다음 코드에서 사용합니다 config('app.env')..
cosmos

43

이 명령이 당신을 구할 수 있기를 바랍니다.

php artisan config : clear


23

.env 또는 데이터베이스 폴더의 일부 수정 후 또는 기타 수정으로 인해 Laravel이 예상대로 작동하지 않는 경우 가장 중요한 5 가지 명령입니다. 자세한 설명은 다음과 같습니다. https://www.youtube.com/watch?v=Q1ynDMC8UGg

php artisan config:clear
php artisan cache:clear
php artisan view:clear
php artisan route:clear
composer dump-autoload

여기에 같은 문제가 있습니다 .... env ()가 작동하지 않습니다. 캐시 제거, composer dump-autoload .... 등을 시도했습니다. 나는 laravel 5.5.44를 사용하고 있으며 \ Config :: get ()
calin24

env 파일 또는 구성 등과 관련된 모든 종류의 캐시 문제를 제거하기 위해 실행해야하는 모든 명령을 한곳에 나열했습니다. 스레드는 다음과 같습니다. stackoverflow.com/a/43041479/6935763 모두 실행하고 알려주세요. 여전히 작동하지 않는지 확인하십시오.
학습자

2
실행 만 php artisan config:cache작동하지 않습니다. 내가 실행 php artisan config:clear하면 작동합니다. 이제 다시 env ($ key)를 사용할 수 있습니다. 들으 @Learner
calin24

나는 당신의 토론을 읽고 별도의 답변에 내 설명을 넣었습니다. 확인하십시오.
Yevgeniy Afanasyev

14

\Config::get('app.env');대신 사용 env(APP_ENV);하면 결국 동일한 오류가 발생하고 라이브 웹 사이트에 좋지 않기 때문입니다.

ENV에서 사용자 정의 변수를 추가하려면 구성 앱으로 이동하여 다음을 찾으십시오.

/*
    |--------------------------------------------------------------------------
    | Application Environment
    |--------------------------------------------------------------------------
    |
    | This value determines the "environment" your application is currently
    | running in. This may determine how you prefer to configure various
    | services your application utilizes. Set this in your ".env" file.
    |
    */

'env' => env('APP_ENV', 'production'),

" 'env' => env('APP_ENV', 'production')," 아래에 새 줄을 추가합니다. 예를 들어 다음과 같을 수 있습니다.

/*
    |--------------------------------------------------------------------------
    | Application Environment
    |--------------------------------------------------------------------------
    |
    | This value determines the "environment" your application is currently
    | running in. This may determine how you prefer to configure various
    | services your application utilizes. Set this in your ".env" file.
    |
    */

'env' => env('APP_ENV', 'production'),
'key' => env('APP_KEY'),

다음과 같이 "key"변수를 호출 할 수 있습니다.

\Config::get('app.key');

앱 환경에 "key"와 같은 새 변수를 추가 할 때마다를 사용 config:cache하여 캐시를 재설정해야합니다.


잘 모르겠지만이 버그는 Windows에서만 발생할 수 있습니다. 그러나 귀하의 솔루션은 Windows에서도 해결되었습니다. Linux 프로덕션 환경에서 작동합니까?
Amit Shah

@AmitShah, 그것은 버그가 아니라 기능입니다. 자세한 내용은 내 답변을 확인하십시오.
Yevgeniy Afanasyev

13

다음 명령이 저에게 효과적이었습니다. 실수로 모든 캐시 파일을 지웠으므로 env('something')null을 반환했습니다.

php artisan optimize:clear

10

다음과 같이 해결할 수있는 ".env"알려진 버그입니다.

php artisan config:cache

16
일부 사용자는 PHP는 장인 설정을 할 필요가 있습니다 : 대신 지우
DIGITALCRIMINAL

6
라 라벨 5.5 'php artisan config : clear'를 실행해야했습니다. 감사합니다
dacastro4 2017-10-24

4
php artisan config : cache는 env () 값이 null 인 이유입니다. 구성 및 환경 변수를 캐시하려면 일단 캐시 된 env ()는 항상 null을 반환하므로 구성 파일을 제외한 다른 곳에서는 env ()를 사용하지 않아야합니다. 지금도 config () 및 Config :: get () 도우미가 캐싱 후 null을 반환하는 것을보고 있지만 이는 이상합니다.
BRBdot

위의 후속 조치-... 그래서 config () 도우미가 .env의 값에 직접 액세스 할 수 없다는 것을 깨달아야합니다. 기존 config / <insert config file name> .php 구성 파일을 생성하거나 사용하고 .env에서 구성 항목을 생성 한 다음 매핑 된 값을 사용해야합니다.
BRBdot

1

수락 된 답변으로 문제가 해결되지 않으면 .env 파일에 올바른 읽기 및 쓰기 권한이 있는지 확인하십시오. 프레임 워크 / 라이브러리에서 파일을 읽을 수없는 경우 값은 항상 null입니다. 내 Lumen 프로젝트 중 하나 에서이 문제를 발견했지만 파일 권한을 변경 한 후에 작동했습니다.


0

나는 이것이 매우 오래된 스레드이며 그 이유가 동일하지 않을 수 있음을 알고 있습니다. 그러나 나에게도 같은 문제가 발생했습니다.

그 이유는 .env 파일에 문제가 있었기 때문입니다. 이것이 내가 .env에서 얻은 것입니다.

TEST="e@1asa

끝 따옴표가 누락되었습니다. 그리고 그것은 다음과 같아야합니다.

TEST="e@1asa"

이후에 추가 한 모든 환경 변수는이 오류로 인해 null을 반환했습니다.

오류 로그에도 기록되지 않습니다. 따라서이 오류를 만났다면 예제 env 변수를 파일의 첫 번째 레코드로 추가해보십시오 . 작동하고 마침내 작동하지 않는 기록은 .env 내부에 오류가있을 수 있습니다.


0

프로젝트의 루트 폴더에 .env 파일을 배치합니다.

app.php 파일에 추가하십시오.

try {
    (new Dotenv\Dotenv(__DIR__.'/../'))->load();
} catch (Dotenv\Exception\InvalidPathException $e) {
    echo $e;
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.