Laravel 5.2 не читає env-файл


110

Після оновлення до Laravel 5.2 жодне з моїх .envзначень файлів не читається. Я дотримувався інструкцій щодо оновлення ; жоден з моїх конфігураційних файлів не був змінений, крім auth.php. Всі вони добре працювали в попередній версії, 5.1.19

.env містить такі значення, як

DB_DATABASE=mydb
DB_USERNAME=myuser

config/database.php містить

'mysql' => [
    'database' => env('DB_DATABASE', 'forge'),
    'username' => env('DB_USERNAME', 'forge'),
]

Я отримую цю помилку:

PDOException: SQLSTATE[HY000] [1045] Access denied for user 'forge'@'localhost' (using password: NO)

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

Я також спробував

php artisan config:clear
php artisan cache:clear

Оновлення

Пробуючи php artisan tinker

>>> env('DB_DATABASE')
=> null
>>> getenv('DB_DATABASE')
=> false
>>> config('database.connections.mysql.database')
=> "forge"
>>> dd($_ENV)
[]

Я спробував встановити свіжу копію Laravel 5.2. В основному я лише копіював у своїй appпапці; додаткові пакети композиторів не включені. Все ще виникає те саме питання. У мене є інші проекти Laravel 5.2 на тому ж сервері, які працюють нормально.


1
Ви впевнені, що файл .env названий лише .env? Не .env.example?
Джеймс Елліотт

Андрій, ти редагуєш .env-файл інтерфейсом forge або завантажуєш його?
Марк Девідсон

@JamesElliott так, це.env
andrewtweber

1
Або ти це працюєш локально? Якщо ви працюєте під ремісником, вам потрібно перезапустити його на всякий випадок.
Марк Девідсон

@MarkDavidson редагує це через vi в командному рядку, і ні, він знаходиться на повному сервері
andrewtweber

Відповіді:


91

З офіційних приміток щодо оновлення Laravel 5.2:

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

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

Довідка: https://laravel.com/docs/5.2/upgrade#upgrade-5.2.0


36
php artisan config:cacheвирішили це для мене - більше нічого не допомогло. Навіть php artisan config:clear- спасибі!
каїр

36
Laravel 5.3 php artisan config:clear- єдине, що працювало на мене
Peon

9
Laravel 5.4 - розгорнуто на VPS: php artisan config:clearпрацював на мене. Я не робив config: кеш раніше, тому мені здавалося трохи дивним, що я повинен був очистити кеш.
Антоніо


переконайтесь, що ви редагуєте .envзамість .env.exampleфайлу
Connor Leech

84

Якщо будь-яка з ваших .envзмінних містить пробіл, переконайтеся, що ви загорнули їх у подвійні лапки. Наприклад:

SITE_NAME="My website"

Не забудьте очистити кеш-пам'ять перед тестуванням:

php artisan config:cache
php artisan config:clear

Так, це працює. Після зміни будь-якого значення у .envфайлі запустіть php artisan config:cache & php artisan config:clearкоманду. Це спрацює.
Шандан Шарма

41

Ого. Добре горе. Це тому, що у мене було значення env із пробілом у ньому, а не в оточенні лапок

Це

SITE_NAME=My website

Змінився на це

SITE_NAME="My website"

Виправлено це. Я думаю, це стосувалося Laravel 5.2, тепер оновлено vlucas / phpdotenv з 1.1.1 до 2.1.0


Те саме думаю - схоже, що пробіли викликають проблеми в .envпункті 5.2, де, як і в 5.1, це не відбулося.
thomthom

5
І це один із моїх (безлічі) помилок із Laravel: він має звичку іноді мовчки ігнорувати та приймати різноманітні конфігураційні та / або інші типи помилок, без жодних ознак, що щось пішло не так. Враховуючи, це може бути "особливістю" phpdotenv, але Laravel все ще знає, що є .envфайл, який потрібно включити, і що він не був успішним, але не намагається нікому сказати.
dKen

2
Я вже витрачав години на щось таке дурне. Дякую, що зупинили мене більше витрачати!
Jenski

29

Для мене він працював у такому порядку:

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

І я спробував усі залишки без везіння.


2
Це замовлення вирішило мою проблему через кілька годин налагодження.
Міньйон

Врятувало мені життя. Ткс. Але я не зрозумів, чому.
Mateus

цей наказ мене врятував. Спасибі
Асад Улла

Дякую, добрий Інтернет незнайомець, це все зробило!
Едуардо

Якби ви отримували 1 долар кожного разу, коли я прийду до цієї відповіді, ви вже були б багаті. Дякую!
Алтін

25

У мене була аналогічна проблема на мою , config/services.phpі я вирішив з допомогою config clearі optimizeкоманди:

php artisan config:clear
php artisan optimize

24

Для мене працювало наступне

- php artisan config:cache
- php artisan config:clear
- php artisan cache:clear

17

запустіть це:

php artisan config:clear
php artisan cache:clear

тоді
php artisan config:cache


11

У мене було те саме питання щодо місцевого середовища, що я вирішив

  1. php artisan config: ясно
  2. php artisan config: кеш
  3. а потім скасувати команду php artisan serve і перезапустити знову.

11

Вирішити проблему можна за наступною рекомендацією

Рекомендація 1:

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

Рекомендація 2: Встановіть значення env у подвійній пропозиції

 GOOGLE_CLIENT_ID="887557629-9h6n4ne.apps.googleusercontent.com"
 GOOGLE_CLIENT_SECRET="YT2ev2SpJt_Pa3dit60iFJ"
 GOOGLE_MAP="AIzaSyCK6RWwql0DucT7Sl43w9ma-k8qU"

Рекомендація 3: Виконуйте таку послідовність команд після зміни будь-якої конфігурації або значення env.

 composer dump-autoload
 composer dump-autoload -o

 php artisan clear-compiled
 php artisan optimize

 php artisan route:clear
 php artisan view:clear

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

Рекомендація 4: Коли синтаксис1 не працює, ви можете спробувати інший синтаксис2

   $val1 = env('VARIABLE_NAME');     // syntax1
   $val2 = getenv('VARIABLE_NAME');  // syntax2
   echo 'systax1 value is:'.$val1.' & systax2 value is:'.$val2;

Рекомендація 5: Коли ваше число користувачів більше / більше, вам доведеться збільшити розмір відповідної пам'яті в конфігурації сервера .

Рекомендація 6: Встановіть ймовірне значення за замовчуванням, коли ви читаєте змінну .env.

 $googleClinetId=env("GOOGLE_CLIENT_ID","889159-9h6n95f1e.apps.googleusercontent.com");
 $googleSecretId=env("GOOGLE_CLIENT_ID","YT2evBCt_Pa3dit60iFJ");
 $googleMap=env("GOOGLE_MAP","AIzaSyCK6RUl0T7Sl43w9ma-k8qU");

11

Коли ви запустили команду, php artisan config:cacheто вона видалить всі envзмінні та env()дасть нульові значення, спробуйте виконати наступну команду і там env()знову почнете ловити всю envзмінну

php artisan config:clear

Як магія, це спрацювало для мене - чудова відповідь!
David Partyka

9

Я пропустив це в інструкціях з оновлення:

Додайте до app.phpконфігураційного файлу опцію конфігурації env, яка виглядає наступним чином: 'env' => env('APP_ENV', 'production')

Додавши цей рядок, локальний .envфайл можна прочитати правильно.


1
Я думаю, що я отримав таку ж помилку, оскільки в моєму додатку був Laravel 4, потім оновлено до 5,0, потім до 5,1 і т.д. Можливо, пропустив додавання цього значення в моєму app.php. Дякуємо, що заощадили мені багато часу. Ось підсумок!
Бруно П. Кіношита

8

Простота - це потужність:

php artisan config:cache

Ви отримаєте:

Кеш конфігурації очищено!

Конфігурація успішно кешована!


6

Те ж саме відбувається і тоді, коли: порт знаходиться у вашому локальному .env

знову подвійні лапки роблять трюк

APP_URL="http://localhost:8000"

і потім

php artisan config:clear


4

Крім того, що @andrewtweber запропонував переконайтесь, що у вас немає пробілів між KEY = і значенням, якщо воно не знаходиться між цитатами

.env файл, наприклад:

...
SITE_NAME= My website
MAIL_PORT= 587
MAIL_FROM_NAME= websitename
...

до:

...
SITE_NAME="My website"
MAIL_PORT=587
MAIL_FROM_NAME=websitename
...

3

Я зіткнувся з цією самою проблемою на своїх місцевих, і я спробував усі відповіді тут, але безрезультатно. Тільки це працювало на мене, php artisan config:clearі restart server. Працює як шарм!


4
Спробуйте @RameshMhetre php artisan config:cache, php artisan config:clearтодіphp artisan cache:clear
Dexter Bengil


2

якщо ви викликали config: кеш під час локальної розробки, ви можете скасувати це, видаливши файл bootstrap / cache / config.php. і це робота для мене.


2

якщо ви викликали config: кеш під час локальної розробки, ви можете скасувати це, видаливши файл bootstrap / cache / config.php. і це робота для мене.

@Payal Pandav дав коментар вище.

Я хочу розповісти простий спосіб вирішення. Просто відредагуйте файл config.php у завантажувальній / кеш / папці. І змінити облікові дані. Це працювало для мене. Не видаляйте цей файл, оскільки він може містити інші важливі дані у виробничому середовищі.


2

У моєму випадку laravel 5.7 env('APP_URL')не працює, але config('app.url')працює. Якщо я додати нову змінну до envі налаштувати - вона не працює - але після php artisan config:cacheїї запуску працює.


3
Якщо ви перебуваєте в середовищі розробки, вам не слід кешувати конфігурацію та маршрути. Щоб видалити весь кеш, ви можете скористатися:php artisan optimize:clear
Zohaib

@ZohaibHassan Як вимкнути кеш для конфігурації та маршрутів у середовищі розробників?
Kamil Kiełczewski

1
Вгорі команда вимкне 1. кеш маршрутів, 2 кеш-пам'яті конфігурації, 3. чіткий перегляд 4. очищення оптимізованих файлів 5. очищення кешу, якщо такий є
Zohaib

1
Тільки для конфігурації ви можете використовувати php artisan config:clearйого, очистить кеш конфігурації і більше не буде генеруватися, і коли ви перейдете на виробництво, можете запустити php artisan config:cacheкешування ваших конфігурацій
Zohaib

1

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


1

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

 PHP artisan::config:clear

тому обережно використовуйте цю команду. тому що він буде стерти всі конфігураційні дані з кешу. тому після цього він не поверне жодної цінності. Тож у цій ситуації вам потрібно скористатися цим спочатку, якщо ви запустили команду PHP artisan config :: clear .

php artisan config:cache  // it will cache all data 
php artisan config:clear
Configuration cache cleared!

1

Я пережив це. Причина полягала в тому, що apache (користувацькі www-дані) не міг читати .env через дозволи файлів. Тому я змінив дозволи на файли, щоб переконатися, що сервер (apache) прочитав дозволи на файл. Просто це і бум, це все працювало зараз!
Оновлення:
як це зробити, залежить від того, кому належить файл .env, але якщо припустити, що він належить до www-dataгрупи Apache , ви можете зробити це:

sudo chmod g+r .env

Змініть його залежно від вашої структури дозволів.


So i changed the file permissions to ensure that the server (apache) had read permissions to the file.це насправді неправильний підхід. Ви повинні мати фіксований конфігурацію apaxhe, щоб він обслуговував цей конкретний сайт як власник, який володіє цими файлами
Marcin Orlowski

0

Я допустив помилку, зробивши dd / die / dump у index.phpфайлі. Це змушує систему не регенерувати конфігури.

Просто виконайте скидання файлів перегляду. Зміни до .envоновлення файлу миттєво.


0

У мене були деякі проблеми з цим. Здавалося, проблема з дозволом на файли десь у додатку - не .env-файл.

Мені довелося - зупинити свій докер - використовувати chown, щоб встановити права власності на власного користувача на весь проект - запустити докер знову

Цього разу це спрацювало.


-1

Спробував майже все вищесказане. Закінчив робити

chmod 666 .env

який працював. Ця проблема, здається, продовжує з'являтись у додатку, який я успадкував, проте останній час був після додавання .env.testting. Запуск Laravel 5.8

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.