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

После обновления до 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. Я в основном только скопировал в мою папку "приложения"; дополнительные пакеты композитора не включены. Все еще с той же проблемой. У меня есть другие проекты Laravel 5.2 на том же сервере, которые работают нормально.

36 ответов

Решение

Вот это да. Печаль во благо. Это потому, что у меня было значение env с пробелом в нем, а не в кавычках

это

SITE_NAME=My website

Поменял на это

SITE_NAME="My website"

Починил это. Я думаю, что это связано с Laravel 5.2, теперь обновляющим vlucas / phpdotenv с 1.1.1 до 2.1.0

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

SITE_NAME="My website"

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

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

Из официальных замечаний по обновлению Laravel 5.2:

Если вы используете config:cache Во время развертывания необходимо убедиться, что вы вызываете только env функционировать из ваших файлов конфигурации, а не из другого места в вашем приложении.

Если вы звоните env из вашего приложения настоятельно рекомендуется добавить правильные значения конфигурации в ваши файлы конфигурации и вызвать env вместо этого, что позволяет конвертировать ваши env звонки в config звонки.

Ссылка: https://laravel.com/docs/5.2/upgrade

Для меня это сработало так:

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

И все остальные я перепробовал без удачи.

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

php artisan config:clear

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

  • Конфигурация php artisan: кеш
  • Конфигурация PHP Artisan: очистить
  • PHP кеш ремесленника: очистить

У меня была похожая проблема в моем config/services.php и я решил использовать config clear а также optimize команды:

php artisan config:clear
php artisan optimize

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

Рекомендация 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");

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

php artisan config:clear
php artisan cache:clear

или же
php artisan config:cache

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

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

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

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

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

Простота - это сила:

php artisan config:cache

Вы получите:

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

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

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

    php artisan config:clear
    php artisan config:cache

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

опять двойные кавычки добиваются цели

APP_URL="http://localhost:8000"

а потом

php artisan config:clear

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

Также в дополнение к тому, что @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
...

Я испытал это. Причина была в том, что apache (пользовательские www-данные) не мог прочитать.env из-за прав доступа к файлу. Поэтому я изменил права доступа к файлу, чтобы сервер (apache) имел права на чтение файла. Только это и бум, теперь все работало!

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

Я знаю, что это очень старо, но сегодня я обнаружил еще одну причину, по которой мой не загружался:

  • У меня был (совершенный)
  • я недавно переключилсяAPP_ENVотdevкlocal

С L8 (и, возможно, раньше) происходит то, что он пытается найти.env.<APP_ENV>и если находит, использует.

Забавный факт: в моем случае это был файл-чертеж с неконфиденциальной информацией, который не предназначался для прямого использования, но так уж вышло.

Удаление.env.localпривел к тому, что Laravel искал.envвместо.

Запустите эту команду

      php artisan config:clear   //repopulate all the env variable
php artisan cache:clear    //flush all the cached content
php artisan config:cache //flush all cached env variable

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

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

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

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

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

В моем случае мне нужно было перезапустить мои задания Supervisord (т.е. мои рабочие очереди). После этого новая переменная среды, которую я добавил в свой файл .env, была успешно загружена в мое приложение.

Помните, что рабочие очереди — это долгоживущие процессы, которые хранят состояние загруженного приложения в памяти. В результате они не заметят изменений в вашей кодовой базе после их запуска. Итак, во время процесса развертывания обязательно перезапустите обработчики очередей. Кроме того, помните, что любое статическое состояние, созданное или измененное вашим приложением, не будет автоматически сбрасываться между заданиями.

Источник: Официальные документы Laravel — Очереди

Если вы запустите это php artisan config:cache команда на консоли, тогда он будет хранить все содержимое файла.env в кеше, после этой команды, если вы добавите любое содержимое в файл.env, он не будет доступен, пока вы не запустите php artisan config:clear команда

Я сталкиваюсь с той же проблемой много раз во время развития личинок. иногда 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!

Если вы пришли сюда, потому что у вас есть несколько.env.*файлы иphp artisan config:cacheпривел к неправильным настройкам, это потому, что он (пытался) прочитать.envфайл, а не тот, который специфичен для вашей среды. Попробуйте это вместо этого (гдеCODEсоответствует.env.CODE):

      APP_ENV=CODE php artisan config:cache

В моем случае я использовал VSCODE, и оказалось, что мой.envфайл был автоматически обнаружен IDE как файл сценария оболочки, а не как Ini, который вызывал у меня проблему. Это редкое явление, но я надеюсь, что это сэкономит кому-то время.

Для кодера Laravel. Мы можем использовать config() для решения этой проблемы.

в файле "config/app.php":

      'same_url' => env('SAME_URL', 'http://localhost'),

в вашей кодовой базе:

      $sameURL = config('app.same_url').'/orders/';

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

chmod 666 .env

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

Другие вопросы по тегам