目次
はじめに
SQLの接続情報等の機密データをソースコードに直接記述すると下記のデメリット がある。
- ソースを見られたら機密データが漏洩する
- 環境によって値を変更することができない
これらを解決するため、composerの活用し環境変数で管理する
Composerとは?
PHPのライブラリ依存管理ツール
例)Aライブラリを使うためには、先にBライブラリをインストールしなければいけない。これを依存関係という。
Composerはこのような依存しているライブラリをまとめてインストールしてくれる。
変数と環境変数
変数とは?
- 値を格納しておくために定義する箱のようなもの、PHPのコード内でのみ使用できる
環境変数とは?
- OSに格納される変数
- PHPに記述しないので変数の中身がバレない、環境によって切り替えられる
環境変数を使うには?
phpdotenvを使うと容易に設定ができる
これにより.envファイルを環境変数として定義することができる
設定手順
環境変数を設定する
phpdotenvのインストールにはcomposerが必要なため、先にこちらから準備する
- ターミナルで下記コマンドを実行してcomposerを初期化する
(composerを設定したいディレクトリに移動して実行)
$ composer init
- 初期設定にあたり下記の画面がでるが、とりあえずエンターキー連打で進める
(一部入力が必要な箇所あり)
Package name (<vendor>/<name>) [root/html]:
Description []:
Author [, n to skip] : ←ここだけ「n」と入力
Minimum Stability []:
Package Type (e.g. library, project, metapackage, composer-plugin) []:
License []:
Define your dependencies.
Would you like to define your dependencies (require) interactively [yes]?
Search for a package:
Would you like to define your dev dependencies (require-dev) interactively [yes]?
Search for a package:
{
"name" : "root/html",
"require": {}
}
Do you confirm generation [yes]?
- ここまで進めると指定ディレクトリにcomposer.jsonが生成される
- ファイルを開くと初期状態は下記の記述となっている
{
"name": "root/html",
"require": {}
}
- ファイルの生成が確認できたら下記のコマンドを実行してphpdotenvをインストールする
$ composer require vlucas/phpdotenv
- 完了すると、composer.jsonにphpdotenvが追加され、composer.lockファイルが生成される
- インストールされたphpdotenvの格納先ディレクトリ
/vendor/vlucas/phpdotenv/
- プロジェクトのルートディレクトリに「.env」ファイルを新規作成
当該ファイル内に環境変数を定義する
DB_HOST=$host
DB_USERNAME=$username
DB_PASSWORD=$passwd
DB_DATABASE=$dbname
//変数内には任意の文字列を設定する
- 以上で環境変数を設定することができた
環境変数をアプリケーションに呼び出す
環境変数を呼び出したいphpファイルに対して以下の手順を実施する
- ライブラリを読み込むためにオートロードの設定をする
require __DIR__ . '/vendor/autoload.php';
- 環境変数を読み込む設定をする
$dotenv = Dotenv\Dotenv::createImmutable(__DIR__);
$dotenv->load();
- 環境変数を読み込んで変数に格納する
$dbHost = $_ENV['DB_HOST'];
$dbUsername = $_ENV['DB_USERNAME'];
$dbPassword = $_ENV['DB_PASSWORD'];
$dbDatabase = $_ENV['DB_DATABASE'];
- MySQLの接続情報を設定する
※手続型の接続情報
$link = mysqli_connect($dbHost, $dbUsername, $dbPassword, $dbDatabase);
以上の設定で、機密データを別ファイルで管理することができる
コメント