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

Да, работает. После изменения любого значения в .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


13

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

php artisan config:clear

Как по волшебству, это сработало для меня - отличный ответ!
— Дэвид Партика,

12

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

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

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правильному чтению локального файла.


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


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: 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

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


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, чтобы установить права владения для моего собственного пользователя для всего проекта - снова запустить докер

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


-1

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

chmod 666 .env

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.