#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
файл в корневом каталоге документа. (Или соответствующий подкаталог.)
Ссылка: