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

111

После обновления до 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. Это влияет на все мои файлы конфигурации, включая сторонние, такие как bugsnag.

Я тоже пробовал

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
Эндрютвебер
1
Или вы используете это локально? Если вы работаете под кустарной службой, вам необходимо перезапустить ее на всякий случай.
Марк Дэвидсон
@MarkDavidson редактирует его через vi в командной строке, и нет, это на полном сервере
andrewtweber

Ответы:

92

Из официальных примечаний к обновлению 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: cache, поэтому мне показалось немного странным, что мне пришлось очистить кеш.
Антонио
убедитесь, что вы редактируете, .envа не .env.exampleфайл
Коннор Лич
85

Если какая-либо из ваших .envпеременных содержит пробелы, убедитесь, что вы заключили их в двойные кавычки. Например:

SITE_NAME="My website"

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

php artisan config:cache
php artisan config:clear
Benjolly1989
источник
Да, работает. После изменения любого значения в .envфайле запустите php artisan config:cache & php artisan config:clearкоманду. Это сработает.
Чандан Шарма
42

Вот это да. Печаль во благо. Это потому, что у меня было значение 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
30

Для меня это сработало в следующем порядке:

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

А все остальное перепробовал безуспешно.

ТРОНН
источник
2
Этот заказ решил мою проблему после нескольких часов отладки.
Миньон
Спас мою жизнь. Ткс. Но id не понимала почему.
Матеуш Галассо
этот приказ меня спас. Спасибо
Асад уллах
Спасибо, добрый интернет-незнакомец, дело сделано!
Эдуардо
Если бы вы получали 1 доллар каждый раз, когда я прихожу к этому ответу, вы бы уже были богаты. Спасибо!
Altin
26

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

php artisan config:clear
php artisan optimize
Дерич Лима
источник
26

Для меня сработало следующее

- php artisan config:cache
- php artisan config:clear
- php artisan cache:clear
beatusfk
источник
18

запустите это:

php artisan config:clear
php artisan cache:clear

затем
php artisan config:cache

Ганеш К.
источник
13

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

php artisan config:clear
Шахрукх Анвар
источник
Как по волшебству, это сработало для меня - отличный ответ!
Дэвид Партика,
12

У меня была такая же проблема с локальной средой, я решил

  1. Конфигурация php artisan: очистить
  2. Конфигурация php artisan: кеш
  3. а затем отмените команду php artisan serve и снова перезапустите.
jay_mziray
источник
12

Решить проблему можно по следующей рекомендации

Рекомендация 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");
Маджба Хабиб
источник
10

Я пропустил это в инструкции по обновлению:

Добавьте в app.phpфайл конфигурации параметр конфигурации env, который выглядит следующим образом: 'env' => env('APP_ENV', 'production')

Добавление этой строки привело к .envправильному чтению локального файла.

dKen
источник
1
Думаю, я получил ту же ошибку, так как мое приложение было Laravel 4, затем обновлено до 5.0, затем до 5.1 и т.д. Вероятно, я пропустил добавление этого значения в свой app.php. Спасибо, что сэкономили мне много времени. Вот голос за!
Бруно П. Киношита
9

В простоте - сила:

php artisan config:cache

Вы получите:

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

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

Адам Козловски
источник
7

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

снова двойные кавычки делают трюк

APP_URL="http://localhost:8000"

а потом

php artisan config:clear
Ставрос
источник
5

удалить кеш, используя:

    php artisan config:clear
    php artisan config:cache
Диего Санта-Крус Мендесу
источник
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
...
Waqleh
источник
3

Я столкнулся с этой же проблемой на моем локальном компьютере, и я попробовал все ответы здесь, но безрезультатно. Только это сработало для меня, php artisan config:clearи restart server. Работает как шарм!

Декстер Бенгил
источник
4
@RameshMhetre попробуйте php artisan config:cache, php artisan config:clearтогдаphp artisan cache:clear
Dexter Bengil
2

Я решил эту проблему, создав новый ключ с помощью команды: php artisan key:generate

Анхель Прието
источник
2

если вы вызывали config: cache во время локальной разработки, вы можете отменить это, удалив файл bootstrap / cache / config.php. и это работа для меня.

Паял Пандав
источник
2

если вы вызывали config: cache во время локальной разработки, вы можете отменить это, удалив файл bootstrap / cache / config.php. и это работа для меня.

@Payal Pandav дал комментарий выше.

Хочу подсказать простой обходной путь. Просто отредактируйте файл config.php в папке bootstrap / cache /. И измените учетные данные. Это сработало для меня. Не удаляйте этот файл, так как он может содержать другие важные данные в производственной среде.

Дайя Сатиш
источник
2

В моем случае laravel 5.7 env('APP_URL')не работает, но config('app.url')работает. Если я добавлю новую переменную в envконфигурацию и в нее - она ​​не работает - но после php artisan config:cacheее запуска работает.

Камил Келчевски
источник
3
Если вы находитесь в среде разработки, вам не следует кэшировать конфигурацию и маршруты. Чтобы удалить весь кеш, вы можете использовать:php artisan optimize:clear
Zohaib
@ZohaibHassan Как отключить кеш для конфигурации и маршрутов в среде разработки?
Камил Келчевски
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, но при условии, что он принадлежит к группе Apache www-data, вы можете сделать это:

sudo chmod g+r .env

Измените его в зависимости от вашей структуры разрешений.

gthuo
источник
So i changed the file permissions to ensure that the server (apache) had read permissions to the file.это на самом деле неправильный подход. У вас должна быть исправлена ​​конфигурация apaxhe, чтобы он служил этому конкретному сайту в качестве владельца, которому принадлежат эти файлы,
Марцин Орловски,
0

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

Просто сделайте дамп в просмотре файлов. Изменения в .envфайле обновляются мгновенно.

Бин Хан
источник
0

У меня с этим были проблемы. Похоже, это проблема с правами доступа к файлу где-то в приложении, а не с файлом .env.

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

На этот раз это сработало.

thephper
источник
-1

Пробовал почти все вышеперечисленное. Закончил делать

chmod 666 .env

который работал. Эта проблема, кажется, продолжает возникать в приложении, которое я унаследовал, однако в последний раз это было после добавления .env.testing. Запуск Laravel 5.8

PeterG
источник