2016-11-10 10 views
2

다음 명령을 사용하여 루트 디렉토리에 추가 한 환경 변수에 액세스해야하는 SendGrid의 API를 사용하려고합니다.PHP/phpinfo()의 Shell에서 환경 변수를 얻는 방법

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

이 내 루트 폴더에 sendgrid.env 파일을 만들었습니다, 내 .gitignore 파일에 sendgrid.env을 추가하고, 환경 변수로 SENDGRID_API_KEY을 추가했다.

그러나 PHP의 getenv('SENDGRID_API_KEY') 키는 아무 것도 반환하지 않으며 PHP의 phpinfo()은 환경 변수로 SENDGRID_API_KEY을 반영하지 않습니다.

여기에 API installation instructions입니다.

+0

왜 PHP가'sendgrid.env' 파일을 읽을해야한다고 생각합니까? 'putenv()'를 사용해 보셨습니까? –

+0

안녕하세요 루슬란입니다. 나는 그것이해야한다고 생각하지 않는다. 그리고 나는 그렇지 않다는 것을 안다. 그러나 환경 변수를 읽을 수 있어야하므로'source./sendgrid.env' 명령을 사용해야합니다. API 지침을 따르고 있으며 putenv에 대해서는 아무 말도하지 않습니다. 질문에 대한 링크를 추가했습니다. 이 작은 조각을 제외하고 설치는 상당히 짧고 간단합니다. –

답변

1

.env 파일을 읽으려면 다른 패키지를 사용해야한다는 것을 의미합니다. 환경에 파일의 내용을로드하는 Dotenv 클래스를 사용하여 자신의 공식 사이트에 sample이있다 : 클래스가 어디에서 오는지 아직

<?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'에 포함 된 설정 파일을 사용하는 데 익숙합니다. 또 다른 방법은 CLI 스크립트 인 경우'YOUR_SENDGRID_KEY = '123abcdef ...'php yourscript-calling-getenv.php'와 같은 쉘 래퍼를 만드는 것입니다. 스크립트가 다른 SAPI (예 : FPM 또는 Apache)에서 실행될 예정이라면 특정 환경을 통과하도록 웹 서버를 조정할 수 있습니다. 모든 PHP 스크립트 또는 특정 디렉토리 내의 PHP 스크립트에 대한 변수. 그것은 모두 특정 작업에 달려있다. –

+0

고맙다 루슬란. 슈퍼 유용한. 재미있게도 phpdotenv의 readme에서 바로 나온다 "** phpdotenv는 개발 환경을 위해 만들어졌으며 일반적으로 프로덕션 환경에서 사용되어서는 안된다. 실제 환경 변수는 .env 파일 로딩의 오버 헤드가 없도록 설정되어야한다. 각 요청에 **. " 저는 프로덕션 코드 만 전적으로 처리했기 때문에 실제 키를 가지고 방금 전진 할 수있었습니다.하지만 이는 공동 작업 할 때 코드를 더 안전하게 공유하는 방법에 대한 중요한 교훈입니다. –