PHPでAPIを叩くときの環境変数の読み込みについて備忘録

最近ちょくちょくPHP。
今回はPHPでAPIを叩く時のアクセストークンとかシークレットキーとか、バージョン管理してうっかりGithubに上げるとやばいものを環境変数のファイルに出して監視外に置く方法が分かったのでその備忘録。

APIキーの取扱いについて

キーをGithubで公開ちゃったが為に不正利用で100万円請求されるとか、情報書き換えられちゃって使えなくなるみたいなのをちょくちょく見かけることがあってこういうのどうするんだろうなと思ってました。環境変数で扱うのが良いみたい。

【GitHub】に載せたくない環境変数の書き方 Python - Qiita

環境変数と読み込み処理

こういうGithubでは見せたくない情報とかを入れておくとか、環境によって変える必要がある値なんかを入れておくっぽい?

ファイルとしては、 .env といったファイルに変数を記述するような感覚で記述しておく。
見えるとまずいので .gitignore で監視対象から外しておく。

API_KEY = "ココにキー情報を書く"

このままだと誰かがどう書いたら良いのか分かりにくいので、 .env.sample とかっていうファイルにダミーの値を入れたサンプルの記述をしてgit管理しておく。

環境変数の読み込みにライブラリを使ってみる

このままだとAPIキーを使えないので、プログラム側に読み込みの処理を作る。この辺はライブラリが有るみたいなので、今回はそれを使ってみた。
もともとRuby用に作られたものをPHPに移植したものらしい。

vlucas/phpdotenv - Github

これをComposerでインストールして、キーの値を拾う処理を書く。

READMEにはこんな感じに書いてある(本記事作成時)

$ php composer.phar require vlucas/phpdotenv

HomebrewでComposerを入れたらコマンドがちょっと違うらしく、以下のようなコマンドでインストールできた。

$ composer require vlucas/phpdotenv

ライブラリの読み込み

この間TwitterのAPI叩くやつやってたときは、 use ライブラリのパス って形で読み込みの宣言(?)をしてたんだけど、今回はREADMEにそういう記述とかなくて、そもそもお作法が分かんなかった。

改めて調べてみると、composerでインストールしたものは、vendor/ の中に格納されて、その中にある autoload.php をrequireしておけば自動で読み込んでくれる らしい。

vendor/
├── autoload.php
├── composer/
└── vlucas/
<?php require_once 'vendor/autoload.php';  ?>

PHPのオートロード(autoload) - Qiita

環境変数の読み込み

ライブラリ自体は読み込めたので、値の呼び出しを書く。読み込みの処理は getenv()$_ENV$_SERVER がある。それぞれ呼び出した時のスコープが変わるみたい(?)

<?php
$dotenv = new Dotenv\Dotenv(__DIR__);
$dotenv->load();

$api_key = getenv('API_KEY');

最後に

環境変数についてとかAPIキーの取扱いはすぐわかったんだけど、そもそものライブラリの読み込み方が分かって無くてエラー吐かれてるのが一番面白かった。
とりあえず解決出来たし良しかなー。