73755


**実現したいこと**  
環境変数を利用してデータベースの接続を管理したい

**行ったこと**  
phpdotenvをインストール

.envファイルの作成(接続内容記入済み)

各接続名の確認

gitignoreにenvファイルを記載

エラー内容がこちらになります。  
原文

[code]

    Fatal error: Uncaught Dotenv\Exception\InvalidPathException: Unable to read any of the environment file(s) at [/app/.env]. in /app/vendor/vlucas/phpdotenv/src/Store/FileStore.php:68 Stack trace: #0 /app/vendor/vlucas/phpdotenv/src/Dotenv.php(222): Dotenv\Store\FileStore->read() #1 /app/connect.php(7): Dotenv\Dotenv->load() #2 /app/index.php(9): connect() #3 {main} thrown in /app/vendor/vlucas/phpdotenv/src/Store/FileStore.php on line 68
    
[/code]

翻訳

[code]

    致命的なエラー：キャッチされていないDotenv \ Exception \ InvalidPathException：[/ app/.env]にある環境ファイルを読み取ることができません。 /app/vendor/vlucas/phpdotenv/src/Store/FileStore.php:68スタックトレース：＃0 /app/vendor/vlucas/phpdotenv/src/Dotenv.php(222）：Dotenv \ Store \ FileStore-> read （）＃1 /app/connect.php(7）：Dotenv \ Dotenv-> load（）＃2 /app/index.php(9）：connect（）＃3{main}が/ app / vendor / vlucasにスローされます /phpdotenv/src/Store/FileStore.php（68行目）
    
[/code]

[![画像の説明をここに入力](https://i.stack.imgur.com/Kp4dy.png)](https://i.stack.imgur.com/Kp4dy.png)

上記のコード

[code]

    <?php
    require __DIR__ . '/vendor/autoload.php';
    function connect()
    {
        try {
            $dotenv = Dotenv\Dotenv::createImmutable(__DIR__);
            $dotenv->load();
    
            $dbHost = $_ENV['DB_HOST'];
            $dbUsername = $_ENV['DB_USERNAME'];
            $dbPassword = $_ENV['DB_PASSWORD'];
            $dbDatabase = $_ENV['DB_DATABASE'];
    
            $db = new PDO("mysql:dbname={$dbDatabase}, host={$dbHost}, charset=utf8, {$dbUsername}, {$dbPassword}");
            $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
        } catch (PDOException $Exception) {
            die('DB接続エラー: ' . $Exception->getMessage());
        }
        return $db;
    }
    
[/code]

調べても中々答えを考えられずどうしたらよいのか分からずにいます。  
何かヒントや気付きでもよいのでご回答いただけないでしょうか。  
何卒よろしくお願いいたします。

2021/02/02 追記  
.envファイルの内容です。  
下記に記入した項目は、heroku configで表示させたデータベース情報を元にしました。

[code]

    DB_HOST="ホスト名"
    DB_USERNAME="ユーザー名"
    DB_PASSWORD="パスワード名"
    DB_DATABASE="データベース名"
    
[/code]

エラー発生後、.envファイルを確認した際データベース名が間違えていたので修正したのですが解決できませんでした。

追記  
heroku側での設定です。

[![画像の説明をここに入力](https://i.stack.imgur.com/yW6tv.png)](https://i.stack.imgur.com/yW6tv.png)


CC BY-SA 4.0
2021-02-01T08:50:48.087
73732
2021-02-02T07:03:46.063
2021-02-02T00:29:52.343
3060
42289
question
php mysql heroku
環境変数を利用してデータベース接続の管理をしたいのですが上手く読み込まれません


dotenvの使い方としては、例えばローカル環境のDB接続用のデータを入れておいて、本番サーバなどではホスティングの環境変数（HerokuでいうところのConfig
Vars）を利用することで上書きするというやり方が一般的です。  
dotenvの環境変数とホスティングの環境変数両方あった場合ではホスティングの環境変数が優先して利用される仕組みです。

そのためローカル環境の接続情報でしたらdotenvファイル自体はignoreせずにgitにプッシュしてしまって運用しても問題ないと思います。

またローカル環境が必要ない & アプリを動作環境に環境変数が設定できるのであれば、そもそもdotenvを利用する必要はないでしょう。  
Herokuであれば

[code]

    getenv('XXXXX')
    
[/code]

で取得できるでしょう。

参考: [環境設定を定義する](https://devcenter.heroku.com/ja/articles/getting-started-with-
php#-11)


CC BY-SA 4.0
2021-02-02T07:03:46.063
73755
2021-02-02T07:03:46.063
22665
73732
answer