勉強したことのメモ

Webエンジニア / プログラマが勉強したことのメモ。

phpdotenvライブラリを使用してPHPで.envファイルを読み込ませる方法

  PHP

CodeIgniterを勉強していた際に各種設定は「.env」というファイルに記述していたが、素のPHPで作ったサイトでもこのような形で実装したい(セキュリティ面でこの方が良いらしい)。phpdotenvライブラリを導入することで対応できるそうなので以下に導入方法をメモ。

 

phpdotenv

公式サイト

https://github.com/vlucas/phpdotenv

 

導入方法

phpdotenvのインストール

サーバにSSH接続し以下コマンドでインストールする。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
composer require vlucas/phpdotenv
composer require vlucas/phpdotenv
composer require vlucas/phpdotenv

.envファイルの作成

以下を記述したファイルを.envという名前でアップロードする。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
ID = "test_id"
PASS = "test_pass"
ID = "test_id" PASS = "test_pass"
ID = "test_id"
PASS = "test_pass"

.envファイルの読み込み

.envファイルと同ディレクトリに以下を記述したファイルをアップロードする。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<?php
require_once 'vendor/autoload.php';
$dotenv = Dotenv\Dotenv::createImmutable(__DIR__);
$dotenv->load();
//以下はtest_idが出力される
var_dump($_ENV['ID']);
var_dump($_SERVER['ID']);
//以下はtest_passが出力される
var_dump($_ENV['PASS']);
var_dump($_SERVER['PASS']);
<?php require_once 'vendor/autoload.php'; $dotenv = Dotenv\Dotenv::createImmutable(__DIR__); $dotenv->load(); //以下はtest_idが出力される var_dump($_ENV['ID']); var_dump($_SERVER['ID']); //以下はtest_passが出力される var_dump($_ENV['PASS']); var_dump($_SERVER['PASS']);
<?php
require_once 'vendor/autoload.php';
$dotenv = Dotenv\Dotenv::createImmutable(__DIR__);
$dotenv->load();

//以下はtest_idが出力される
var_dump($_ENV['ID']);
var_dump($_SERVER['ID']);

//以下はtest_passが出力される
var_dump($_ENV['PASS']);
var_dump($_SERVER['PASS']);

ブラウザで上記ページを開くとvar_dumpでの出力が確認できる筈。

 

注意点

数値やbool値は使用できない

こちらのサイトによると.envファイルはテキストとして扱われるため、数値やbool値は設定できない模様。

セキュリティ対策の必要あり

セキュリティ対策をしていない場合、ブラウザから.envファイルが閲覧できる点に注意。

以下のような形でセキュリティ対策を行う必要がある。

  • ルートディレクトリより上に設置する
  • Basic認証をかける
  • .envファイルにアクセスできないようにする

.htaccessによる.envファイルへのアクセス拒否

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<FilesMatch "^\.env">
deny from all
</FilesMatch>
<FilesMatch "^\.env"> deny from all </FilesMatch>
<FilesMatch "^\.env">
    deny from all
</FilesMatch>

 

参考サイト

https://qiita.com/hm-om/items/a1dde0a333927eb9ed70

https://qiita.com/H40831/items/aaf8ffa727928661ad1d

https://seiyaan.com/2019/06/phpdotenv/

 - PHP

  関連記事

PHPでJavaScriptを圧縮するライブラリ「JShrink」の利用方法

サイト内でJavaScriptを用いる場合、外部のライブラリやプラグインだと圧縮 ...

PHPでシンプルな英数字のCAPTCHAを「Gregwar / Captcha」ライブラリで実装する方法

PHPでシンプルなランダム英数字のCAPTCHAを実装したい。「Gregwar ...

PHPでルーティング用ライブラリ「AltoRouter」の利用方法

PHPフレームワークのCodeIgniterを勉強していた際にルーティング機能が ...

PHPでデータベースを取り扱いやすくなるORMライブラリ「idiorm」の利用方法

Codeigniterでデータベースを取り扱う際にクエリビルダクラスを用いて可読 ...

PHPにて「php-ulid」ライブラリを用いてULIDを生成する方法

先日MySQLにてUUIDを発行するメモを書いたがUUID v1だと生成時間によ ...

S