環境変数を管理する(6-5)
機密データをソースコードとは別で管理しよう
通常の変数
PHPのコードの中で定義し、実行したプロセス内でのみ使用できる
プログラムの中に
$name = 'kiyoto';
の様に定義する
コードに直接記述するので、コードを見れば変数の中身が分かり、
また環境によって切り替えることもできない
PHPが動いているOSに保存し、PHPアプリケーションに渡す仕組み
(OSに格納される変数)
OS上に
DB_USER=book_log
の様に定義する
PHPのコードに直接記述しないので、コードを見ても変数の中身がバレず、
また環境によって切り替えられる
環境変数を使うのに、.envファイルを使うと簡単に設定できて便利(phpdotenv)
現状
ソースコードにベタ書き
$link = mysqli_connect('db','book_log','pass','book_log');
.env使うと
ソースコードから分離できる。環境によっても使い分けられる
.envファイル:重要な設定データを定義する→環境変数として定義される
DB_HOST=db
プログラムファイル:.envファイルに定義された値を取得して使える
$dbHost = getenv('DB_HOST'); //$_ENV['DB_HOST']でも取得できる
$link = mysqli_connect($dbHost,…,…,…);
このままでは環境変数とはみなされない
.envファイルに定義された変数をを環境変数として定義しなくてはいけない
その為にライブラリを使う
実際の手順
1,composer initを実行
2,VSCodeにcomposer.jsonファイルが作られたことを確認する
3,php,envのインストールコマンドを実行
4,composer.jsonとcomposer.lockに記載されたことを確認する
5,実際にライブラリがインストールされているvendorフォルダを確認する
6,プロジェクトのルードディレクトリに.envファイルを作成
7,.envファイルに環境変数に置き換える
環境変数にはよく接頭辞を付ける
PASSWORDではなくDB_PASSWORDなど
他のパスワードがあった時に分かりやすくなる
8,プロジェクトに
require __DIR__ . '/../vendor/autoload.php';
でライブラリの内容を読み込む
autoload.phpだけ入れれば他のライブラリ全てが入る
9, $dotenv = Dotenv\Dotenv::createImmutable(__DIR__ . '/..');
$dotenv->load();
$dbHost = $_ENV['DB_HOST'];
$dbUsername = $_ENV['DB_USERNAME'];
$dbPassword = $_ENV['DB_PASSWORD'];
$dbDatabase = $_ENV['DB_DATABASE'];
$link = mysqli_connect($dbHost, $dbUsername, $dbPassword,
$dbDatabase);
//ここが変数から環境変数に置き換わっている
こんな感じでプロジェクトに記述する