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 по умолчанию), или сторонним плагином, вы уже установили его и следуйте правильной процедуре установки:
- Получите имя ключа, указанное в
.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;
}