PHPで.envを読む方法(失敗談含む)


PHPで.envを読む方法

土日に暇だったので、素のPHPの学習をしていました。
普段は、Laravelというとても便利なフレームワークを使っていたので、
基礎的な部分が欠けていると思ったからです。

今回はPHPで.envを読み込むことにつまづいたので、記事にしようかなと思いました。

前提条件:
PC: MacBook Pro (13-inch, 2019, Two Thunderbolt 3 ports) インテルチップ
MacOS: BigSur v11.6
php: v8.0.12
composer: v2.1.9
vlucas/phpdotenv: v^5.4
エディタ:VScode

任意のディレクトリにindex.phpと.envを作成
ブラウザに「password」と表示されたら成功ということで、、、やっていきます。

index.php

<?php

var_dump();

.env

PASS=password

手順

1. Composerを使用して「vlucas/phpdotenv」インストール

phpで.envを読み込むためのライブラリです。
Composerでインストールすると楽です。
公式のGithub: https://github.com/vlucas/phpdotenv

composer require vlucas/phpdotenv

ルートディレクトリに、下記ができます。
- vendor
- composer.json
- composer.lock

2. index.phpに追記

index.php
<?php
require './vendor/autoload.php';

$dotenv = Dotenv\Dotenv::createImmutable(__DIR__);
$dotenv->load();

vendorファイルを読み込む
require './vendor/autoload.php';

dotenvを使用する
$dotenv = Dotenv\Dotenv::createImmutable(DIR);
$dotenv->load();

3. var_dumpの中に$_ENV['PASS']を入れる

index.php
<?php
require './vendor/autoload.php';

$dotenv = Dotenv\Dotenv::createImmutable(__DIR__);
$dotenv->load();

var_dump($_ENV['PASS']);

ブラウザを確認

passwordが表示されてる🎉
オールクリア。

/Users/sakatsumemasato/create/php-learning/index.php:7:string 'password' (length=8)

つまずいた点

Dotenv\Dotenvに警告が出てて気になった。

vscodeの拡張機能:「PHP Intelephense」が警告を出しているだけで、一応動きます。

$_ENVの書き方を間違える

あれれー、動かないな〜。

index.php
var_dump($_ENV('PASS'))

10分後。。。 配列かい。

index.php
var_dump($_ENV['PASS'])

警告ちゃんと読んでればわかりましたね。はい。

Fatal error: Uncaught Error: Array callback must have exactly two elements in /Users/sakatsumemasato/create/php-learning/index.php on line 7

ちなみに

envの値はどうあがいても動くので、envの値が読み込めない場合は、「.env」の影響であることは少ないです。

動く。

"PASS"="password"

動く。

PASS="password"

動く。

"PASS"=password

動く。

'PASS'='password'

動く。

'PASS'=password

動く。

PASS='password'

動く。

PASS=password

動く。

PASS = password

最後に

エラーはちゃんと読みましょう。
現場からは以上です。