2016-11-10 3 views
2

Я пытаюсь использовать API-интерфейс SendGrid, для которого мне нужно получить доступ к переменной среды, которую я добавил в свой корневой каталог, используя следующую команду.Как получить переменную среды из оболочки в PHP/phpinfo()

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 в качестве переменной среды.

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

Вот API installation instructions.

+0

Почему вы думаете, PHP должен прочитать свой 'sendgrid.env' файл? Вы пытались использовать 'putenv()'? –

+0

Привет, Руслан. Я не думаю, что это нужно, и я знаю, что это не так. Тем не менее, я думаю, что он должен иметь возможность читать переменную окружения, следовательно, команду 'source./Sendgrid.env'. Я просто следую инструкциям API, и они ничего не говорят о putenv. Я добавил ссылку на вопрос. Установка довольно короткая и простая, за исключением этой маленькой детали. –

ответ

1

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

<?php 

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

Тем не менее, они даже не объясняют, где класс приходит. По-видимому, они означают, что вы должны установить пакет vlucas/phpdotenv. Заметим, что в текущей версии этого пакета, метод load не является статическим (это на самом деле was static in early versions):

$dotenv = new Dotenv\Dotenv(__DIR__); 
$dotenv->load(); 
+0

* _ * Я довольно новичок. я бы никогда не подумал об этом ... Есть ли у вас какая-либо другая рекомендация решить эту проблему без ссылки на пакет? И если в конце дня вы читаете файл .env, в чем смысл запускать 'source./Sendgrid.env'. Я очень ценю вашу помощь. +1 (и вскоре будет отмечен как ответ). –

+1

Я думаю, вам не нужно использовать переменные среды вообще, если вы не найдете их удобными. Конструктор принимает строку, и вам решать, как извлечь этот ключ. Я использую файлы конфигурации, включенные в '.gitignore'. Другой способ - создать оболочку оболочки, такую ​​как 'YOUR_SENDGRID_KEY = '123abcdef ...' php yourscript-call-getenv.php', если это скрипт CLI. Если сценарий должен работать в другом SAPI (например, FPM или apache), вы можете настроить веб-сервер для передачи определенного env. переменные для всего скрипта PHP или PHP-скрипты в определенном каталоге. Все зависит от конкретной задачи. –

+0

Спасибо Руслан. Супер полезно. Довольно забавно, что это прямо из readme phpdotenv »** phpdotenv предназначен для среды разработки и обычно не должен использоваться в производстве. В процессе производства фактические переменные среды должны быть установлены так, чтобы не было накладных расходов на загрузку файла .env по каждому запросу. ** ". Я полагаю, так как я обрабатываю производственный код исключительно, я мог бы просто продолжить настоящий ключ, но это ценный урок о том, как лучше защищать код при совместной работе. –

Смежные вопросы