Обновите значение .env, используя PHP - PullRequest
1 голос
/ 26 марта 2019

Я знаю, некоторые из вас могут подумать, что это приведет к проблеме безопасности.100 ?

Но ...

Я хочу обновить только 2 определенные флаги, потому что иногда я хочу видеть отчеты, а иногда нет.Если у меня есть способ обновить эти флаги - я могу просто подключить маршрут для переключения этих функций - через ярлык Apple iPhone, когда я хочу видеть отчеты по электронной почте или SMS.


Я пытался

создал маршрут

Route::get('/env/{flag}/{value}','GeneralController@envUpdate');

назвал его

http://localhost/env/MAIL_REPORT/false

, который вызовет эту функцию

public function setEnv($key, $val)
{
    $path = base_path('.env');

    if (file_exists($path)) {

        file_put_contents($path, str_replace(
            $key . '=' . env($key), $key . '=' . $val, file_get_contents($path)
        ));
    }
}

public function envUpdate($flag,$value)
{
    //dd($flag,$value);
    $allow_flags = ["MAIL_REPORT", "SMS_REPORT"];

    if (in_array($flag, $allow_flags))
    {
        setEnv((string)$flag, (string)$value);
        return env(env((string)$flag));
    }

} 

Я продолжал получать true, потому что в моем .env, кажется, не обновляется

MAIL_REPORT=true

Я предполагаю, что MAIL_REPORT=false

Примечание : Я уже пробежал: sudo chmod 777 .env

Как можно было бы продолжить и отладить это?

1 Ответ

2 голосов
/ 26 марта 2019

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

Если вы хотите программно изменять переменные env во время выполнения, вы всегда можете использовать вспомогательный метод config().

config(['mailing. reporting' => false]);

Это также задокументировано в документах .

Edit

Так что я думаю, что ваша реализация переменных env может быть немного неправильной.Переменные среды сами НЕ ДОЛЖНЫ изменяться во время выполнения в ваших приложениях.Единственное место, где должна вызываться функция env(), находится в файлах конфигурации (находится в каталоге config).Итак, вам нужно создать новый ключ в вашем файле конфигурации config/mailing.php.

'reporting' => env('MAIL_REPORT', false),

Теперь, когда вам нужно установить для этой переменной значение true, вы можете либо изменить файл .env, либо использовать первыйданный пример (config(['mailing. reporting' => false]);).

Подробнее об этом можно прочитать в документах .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...