だよねがエンジニアになるんだよね

プログラミング初心者の学びブログ

環境変数を管理する(6-5)

機密データをソースコードとは別で管理しよう

機密データをソースコードから分離するのに環境変数を使う

 

通常の変数

PHPのコードの中で定義し、実行したプロセス内でのみ使用できる

プログラムの中に

$name = 'kiyoto';

の様に定義する

コードに直接記述するので、コードを見れば変数の中身が分かり、

また環境によって切り替えることもできない

 

環境変数

PHPが動いているOSに保存し、PHPアプリケーションに渡す仕組み

(OSに格納される変数)

OS上に

DB_USER=book_log

の様に定義する

PHPのコードに直接記述しないので、コードを見ても変数の中身がバレず

また環境によって切り替えられる

 

 

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);

     //ここが変数から環境変数に置き換わっている

 

     こんな感じでプロジェクトに記述する