Laravel 5.3 - env ​​() всегда возвращает ноль

Я пытаюсь выяснить, почему мой 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 файл.

16 ответов

Решение

Похоже, на сервере была установлена ​​старая версия PHP, которая недоступна для Laravel .env пакет для правильной работы. Когда я развернул сайт на другом сервере с установленным PHP 7, env() возвращенные значения, как и ожидалось.

env(...) Функция не будет работать после того, как вы кешировали конфиг. (начиная с 5,2 до 5,7)

В документации сказано

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

Таким образом, правильный ответ будет

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

И я процитировал это из той же документации

Но для быстрого исправления это подойдет:

Конфигурация PHP Artisan: очистить

И теперь должно быть понятно, почему, когда вы пытались config:cache это не помогло, хотя очищает конфигурацию перед кэшированием.

Надеюсь, эта команда спасет вас

Конфигурация PHP Artisan: очистить

Следующая команда работала для меня. Я случайно очистил все файлы кеша, поэтомуenv('something') возвращал нуль.

php artisan optimize:clear

Возможно, что иногда, когда вы обновляете вещи в своем .env файл или в папке базы данных (например, удалили миграцию, снова создали одно и то же имя, или то же самое с сеялками), изменения не происходят.

У меня были эти проблемы, и следующая команда работала на меня.

Пытаться:composer dump-autoloadМожет быть, помогает.

Использование \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'),

Вы можете вызвать переменную "ключ" следующим образом:

\Config::get('app.key');

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

Просто запустите эту команду в корне вашего проекта Laravel

      rm bootstrap/cache/config.php

Это известная ошибка ".env", которую можно устранить с помощью:

php artisan config:cache

После попытки ниже команд

      php artisan config:clear
php artisan cache:clear
php artisan view:clear
php artisan route:clear

Если вы все еще получаете ноль от env('APP_ENV')тогда попробуй это app()->environment(). Надеюсь, это не вернет null. Это работает для меня

К сожалению, принятое решение не дает подходящего решения этой проблемы!

Дело: Поскольку Laravel 5.2, если вы позвоните env("key") напрямую, он всегда будет возвращаться null если вы выполнили последнюю команду.

В принятом ответе говорится : выполнить последнюю команду для решения проблемы! Это не выход! , потому что нам всегда нужно выполнять последнюю команду ..

Итак, какое решение?

Здесь мне нужно объяснить решение для двух случаев:


Случай 1 (предопределенные ключи): если вам нужно получить значение из файла, который был создан проектом Laravel как (файл .env по умолчанию), или сторонним плагином, вы уже установили его и следуйте правильной процедуре установки:

  1. Получите имя ключа, указанное в .env файл и найдите его в файлах laravel_root/config папка (помните: все файлы в config папка возвращает результаты в виде массива), например, я искал, что по умолчанию определено проектом Laravel:

Как вы здесь говорите, я нашел результаты буксировки в файлах конфигурации буксировки, один в filesystem.php и другие, поэтому, чтобы получить любое из этих значений в любом php (классы или файлы просмотра, ... и т. д.) в вашем проекте laravel, просто назовите его следующим образом:

  • Для результата, который мы нашли в файле, получите его значение:

config ('app.env');

Здесь app - это имя файла php, а env - это ключ массива, который возвращается в результате app.php файл.

  • Для результата, который мы нашли в файле, получите его значение:

config('filesystems.public.url');

Здесь filesystems это имя файла php, и publicявляется ключом (уровень 1) и url- это ключ (уровень 2) массива, возвращенный в результате filesystems.php файл.

Резюме этого случая: если вам нужно получить значение APP_URL в любом php файле проекта Laravel вы можете получить его по телефону config('app.env') функция, будет ли последняя выполненная команда php artisan config:clear или php artisan config:cache, Это не имеет значения.


Случай 2 (не предопределенные ключи - если вам нужно создать новый настраиваемый ключ среды): см. Этот ответ для объяснения: /questions/15969159/poluchit-znachenie-sredyi-v-kontrollere/59394403#59394403

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

Конфигурация php artisan: ясно. Пожалуйста, запустите эту команду, она очистит кеш конфигурации. Это происходит потому, что файл конфигурации кэшируется, и во время кеширования значения должны быть нулевыми.

Не забудьте проверить свой .envфайл для повторяющихся объявлений переменных.

      STRIPE_PUBLISHABLE_KEY="why-wont-this-key-get-outputted"

#...

# Because at the bottom of the .env file it is unset like this
STRIPE_PUBLISHABLE_KEY=

Я знаю, что это очень старая ветка, и причина может быть не в той. Но такая же проблема случилась и со мной.

Причина в том, что у меня проблема с файлом.env. Это то, что я получил в.env

TEST="e@1asa

Обратите внимание, что конечная цитата отсутствует. И должно быть так,

TEST="e@1asa"

Все переменные env, которые я добавил после этого, вернули null из-за этой ошибки.

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

Всегда очищайте кеш конфигурации всякий раз, когда вносятся какие-либо изменения в .env или любые другие файлы конфигурации.

      php artisan config:clear

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

Добавьте их в файл app.php.

try {
    (new Dotenv\Dotenv(__DIR__.'/../'))->load();
} catch (Dotenv\Exception\InvalidPathException $e) {
    echo $e;
}
Другие вопросы по тегам