Как получить переменную среды из оболочки в PHP/phpinfo()

Я пытаюсь использовать API SendGrid, для которого мне нужно получить доступ к переменной среды, которую я добавил в свой корневой каталог, используя следующую команду.

echo "export SENDGRID_API_KEY='YOUR_API_KEY'" > sendgrid.env
echo "sendgrid.env" >> .gitignore
source ./sendgrid.env

Это создало файл sendgrid.env в моей корневой папке, добавило sendgrid.env в мой файл .gitignore и добавило SENDGRID_API_KEY в качестве переменной среды.

Однако ключ PHP getenv('SENDGRID_API_KEY') ничего не возвращает, а phpinfo() PHP не отражает SENDGRID_API_KEY как переменную среды.

Вот инструкции по установке API.


person Govind Rai    schedule 10.11.2016    source источник
comment
Как вы думаете, почему PHP должен читать ваш файл sendgrid.env? Вы пытались использовать putenv()?   -  person Ruslan Osmanov    schedule 10.11.2016
comment
Привет Руслан. Я не думаю, что это должно, и я знаю, что это не так. Однако я думаю, что он должен иметь возможность читать переменную среды, отсюда и команда source ./sendgrid.env. Я просто следую инструкциям API, и они ничего не говорят о putenv. Я добавил ссылку на вопрос. Установка довольно короткая и простая, за исключением этого маленького кусочка.   -  person Govind Rai    schedule 10.11.2016


Ответы (1)


Подразумевается, что вы должны использовать другой пакет для чтения .env файлов. На их официальный сайт, который использует класс Dotenv для загрузки содержимого файлов в среду:

<?php

require 'vendor/autoload.php';
Dotenv::load(__DIR__);
$sendgrid_apikey = getenv('YOUR_SENDGRID_APIKEY');

Тем не менее, они даже не объясняют, откуда берется класс. Судя по всему, они означают, что вы должны установить пакет vlucas/phpdotenv. Обратите внимание, что в текущей версии этого пакета метод load нестатичен (на самом деле он в ранних версиях был статичным):

$dotenv = new Dotenv\Dotenv(__DIR__);
$dotenv->load();
person Ruslan Osmanov    schedule 10.11.2016
comment
_ я начинающий. я бы никогда не понял этого .... Есть ли у вас какие-либо другие рекомендации по решению этой проблемы без ссылки на пакет? И если, в конце концов, вы читаете файл .env, какой смысл запускать source ./sendgrid.env. Я очень ценю вашу помощь. +1 (и скоро будет помечен как ответ). - person Govind Rai; 10.11.2016
comment
Я думаю, вам вообще не нужно использовать переменные среды, если только вы не считаете их удобными. Конструктор принимает строку, и вам решать, как получить этот ключ. Я привык использовать конфигурационные файлы, включенные в .gitignore. Другой способ — создать оболочку вроде YOUR_SENDGRID_KEY='123abcdef...' php yourscript-calling-getenv.php, если это CLI-скрипт. Если сценарий должен работать в другом SAPI (например, FPM или apache), вы можете настроить веб-сервер для передачи определенного окружения. переменные для всех PHP-скриптов или для PHP-скриптов в определенном каталоге. Все зависит от конкретной задачи - person Ruslan Osmanov; 10.11.2016
comment
Спасибо Руслан. Супер полезно. Достаточно забавно, что это прямо из файла readme phpdotenv phpdotenv создан для сред разработки и, как правило, не должен использоваться в производстве. В производственной среде фактические переменные среды должны быть установлены таким образом, чтобы не возникало дополнительных затрат на загрузку файла .env при каждом запросе.. Я думаю, поскольку я работаю исключительно с производственным кодом, я мог бы просто использовать настоящий ключ, но это ценный урок о том, как лучше безопасно обмениваться кодом при совместной работе. - person Govind Rai; 10.11.2016