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に追記
<?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']を入れる
<?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の書き方を間違える
あれれー、動かないな〜。
var_dump($_ENV('PASS'))
10分後。。。 配列かい。
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
最後に
エラーはちゃんと読みましょう。
現場からは以上です。