getenv(ПЕРЕМЕННАЯ СРЕДЫ) ничего не получает

#php #apache #environment-variables

Вопрос:

Перед загрузкой моего проекта на Github я хотел скрыть свой ключ API с помощью переменной среды.

Я добавил эту строку кода в файл .env

 API_KEY=MY_API_KEY
 

но когда я вызываю API_KEY в своем PHP-файле,

 $apiKey=getenv('API_KEY');
print_r($apiKey);
 

Это ничего не показывает. И мой сайт выходит из строя, потому что код не получил ключ API.

Я попытался использовать SetEnv в нижней части httpd.conf файла.

 SetEnv API_KEY=MY_API_KEY
 

но это все равно не работает. print_r() ничего не печатает. Просто ничего…
Что я делаю не так?

Должен .env ли файл находиться в том же месте, что и файл PHP? Я использую Windows, и Xampp Apache-мой веб-сервер.

Комментарии:

1. PHP не автоматически считывает файлы .env сам по себе, у вас должен быть какой-то код, который считывает файл. Это не объясняет, почему версия Apache SetEnv не работала, но вам следует сосредоточиться на одном или другом.

2. Вы перезапустили Apache после обновления httpd.conf файла?

3. @IMSoP Когда я погуглил, как использовать переменные среды php, мне сказали, что я могу использовать файлы .env и httpd.conf … вот почему я попробовал их оба.. Я тоже понятия не имею, почему мой SetEnv не работает 🙁 Я попытаюсь найти в Google коды, которые мне нужны для чтения файла .env. Спасибо

4. @kmoser На самом деле.. Нет. Я попробую это сделать

5. Да, я видел много путаницы в отношении мух .env. На самом деле все, чем они являются, — это еще одно соглашение о формате файлов конфигурации, предназначенное для чтения при запуске на сервере разработки и используемое для имитации реальных переменных среды.

Ответ №1:

Как упоминал IMSoP в комментарии, мне нужно было что-то сделать, чтобы заставить PHP прочитать мой файл .env, и я решил эту проблему, установив phpdotenv. https://github.com/vlucas/phpdotenv Этот пакет делает доступным для чтения файл .env.

 if(file_exists(dirname(__DIR__) . '/vendor/autoload.php')) {
    require_once dirname(__DIR__) . '/vendor/autoload.php';
    $dotenv = DotenvDotenv::createImmutable(dirname(__DIR__));
    $dotenv->load();
}
 

Ответ №2:

Я попытался использовать SetEnv в нижней части файла httpd.conf.

 SetEnv API_KEY=MY_API_KEY
 

Этот метод должен был сработать, за исключением того, что вы использовали неправильный синтаксис. = Между парами ключ/значение не должно быть никаких различий. Аргументы должны быть разделены пробелами. Вышеизложенное установило бы переменную среды с именем API_KEY=MY_API_KEY (вместо API_KEY ) и присвоило бы пустую строку!

Это должно быть просто:

 SetEnv API_KEY MY_API_KEY
 

После изменения httpd.conf вам нужно будет перезапустить Apache.

В качестве альтернативы добавьте директиву в .htaccess файл в корневом каталоге документа. (Или соответствующий подкаталог.)

Ссылка: