Laravel 5 - env ​​() завжди повертає null


81

Я намагаюся з’ясувати, чому мій env()помічник завжди повертається null. Це викликає проблеми, особливо у app.phpфайлах, де env()помічники широко використовуються за замовчуванням. Можливо, якесь таємниче налаштування сервера?

Мій файл 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')

Але все одно успіху немає. Дивна частина полягає в тому, що $_ENVзмінна php містить кожну змінну з .envфайлу.

Відповіді:


180

env(...)функція не працюватиме після того, як ви кешували конфігурацію. (починаючи з ларавелу 5.2 до поточного 5.7)

У документації Laravel сказано

Якщо ви використовуєте config:cacheкоманду під час розгортання, ви повинні переконатися, що ви викликаєте envфункцію лише з файлів конфігурації, а не з будь-якого іншого місця у вашій програмі.

Тож правильною буде відповідь на

Якщо ви телефонуєте до env із вашої програми, настійно рекомендуємо додати належні значення конфігурації до своїх файлів конфігурації та замість цього викликати env із цього місця, що дозволяє конвертувати ваші дзвінки env у конфігураційні.

І я цитував це з тієї ж документації

Але для швидкого виправлення це буде робити:

php artisan config:clear

І тепер має бути зрозуміло, чому при спробі config:cacheце не допомогло, хоча це очищає конфігурацію до кешування.


Дякую, php artisan config:clearце єдине, що допомогло прочитати мої облікові дані AWS SES.
Джо Скотто,

3
Тому я думаю, що нам не слід безпосередньо використовувати щось на зразок env('APP_ENV') нашого додатку. Замість цього ми повинні написати рядок config/app.php: 'env' => env('APP_ENV'),. Потім, ми використовуємо його в нашому коді: config('app.env').
космос

43

Сподіваюся, ця команда врятує вас

php artisan config: clear


23

П’ять найважливіших команд, якщо ваш Laravel не працює належним чином після деяких модифікацій у .env або папці бази даних або через будь-які інші модифікації. Ось повне пояснення: 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 (). Я спробував видалити кеш, dump-composer-autoload .... тощо. Я використовую laravel 5.5.44, і мені доводиться викликати конфігурацію з файлу .env за допомогою \ Config :: get ()
calin24

Я перерахував всі команди в одному місці , вам потрібно запустити для того , щоб виключити будь - яке питання схованки з окр файлу або конфігурації і т.д. Ось нитка: stackoverflow.com/a/43041479/6935763 ласка , запустіть їх все і дайте мені знайте, чи все одно це не працює.
Учень

2
лише біг php artisan config:cacheне працює. Після запуску php artisan config:clearце працює. Тепер я можу знову використовувати env ($ key). Thx @Learner
calin24

Я прочитав вашу дискусію та виклав своє пояснення в окрему відповідь, будь ласка, перевірте її.
Євген Афанасьєв

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');

Кожного разу, коли ви додаєте нову змінну, як "ключ" до середовища програми, вам потрібно буде використати config:cacheдля скидання кешу.


Я не впевнений, але, можливо, ця помилка трапляється лише у вікнах. але ваше рішення вирішило це і у вікнах. це буде працювати у виробничому середовищі Linux?
Amit Shah

@AmitShah, це не помилка, це особливість. Будь ласка, перевірте мою відповідь для деталей.
Євген Афанасьєв

13

Наступна команда працювала для мене. Я випадково очистив усі файли кеш-пам'яті, тому env('something')повертав null.

php artisan optimize:clear

10

Це відома помилка ".env", яку можна вирішити за допомогою:

php artisan config:cache

16
Деяким користувачам може знадобитися виконати php artisan config: замість цього очистити
DIGITALCRIMINAL

6
Laravel 5.5 Мені довелося запустити 'php artisan config: clear'. Дякую
dacastro4

4
php artisan config: кеш є причиною, чому значення env () є нульовими. Якщо ви хочете кешувати конфігурацію та env vars, тоді не слід використовувати env () деінде, крім конфігураційних файлів, оскільки після кешування env () завжди повертає значення null. Хоча зараз я також бачу, як допоміжний файл config () та Config :: get () повертає null після кешування, що теж дивно.
BRBdot

дотримуйтесь вище - ... Отже, тоді ви повинні усвідомити, що помічник config () також не може безпосередньо отримувати доступ до значень у .env. Вам потрібно буде створити або використати існуючий файл конфігурації config / <вставте ім'я конфігураційного файлу> .php та створити запис конфігурації з .env, а потім використовувати це відображене значення.
BRBdot,

1

Якщо прийнята відповідь не вирішує проблему, перевірте, чи файл .env має правильний дозвіл на читання та запис. Якщо файл не може бути прочитаний фреймворком / бібліотекою, тоді значення завжди будуть нульовими. Я зіткнувся з цією проблемою в одному зі своїх проектів Lumen, але після зміни дозволів на файл це спрацювало.


0

Я знаю, що це дуже стара тема, і причина може бути не однаковою. Але зі мною трапилося те саме.

Причиною було те, що у мене виникла проблема з файлом .env. Це те, що я отримав у .env

TEST="e@1asa

Зверніть увагу, що кінцева лапка відсутня. І це повинно бути,

TEST="e@1asa"

Усі змінні env, які я додав після цього, повернули нуль через цю помилку.

У журнал помилок навіть нічого не записано. Отже, якщо ви зустріли цю помилку, спробуйте додати приклад змінної env як перший запис файлу . Якщо це працює і запис нарешті не працює , може бути помилка всередині .env


0

Помістіть файл .env у кореневу папку проекту

Додайте їх у файл app.php.

try {
    (new Dotenv\Dotenv(__DIR__.'/../'))->load();
} catch (Dotenv\Exception\InvalidPathException $e) {
    echo $e;
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.