代码之家  ›  专栏  ›  技术社区  ›  John Beasley

PHP没有读取.env文件

  •  1
  • John Beasley  · 技术社区  · 11 月前

    我正在使用带有PDO的PHP连接到我的数据库。

    我想开始使用环境变量,所以我使用了以下终端命令:

    composer require vlucas/phpdotenv
    

    我的.env文件现在包含以下值:

    DATABASE_HOSTNAME=db
    DATABASE_NAME=myDb
    DATABASE_USERNAME=user 
    DATABASE_PASSWORD=test 
    

    我的测试数据库连接文件如下所示:

    <?php
    require_once __DIR__ . "/vendor/autoload.php";
    
    $dotenv = Dotenv\Dotenv::createImmutable(__DIR__);
    $dotenv->load();
    
    $host = getenv("DATABASE_HOSTNAME");
    $dbname = getenv("DATABASE_NAME");
    $dbuser = getenv("DATABASE_USERNAME");
    $dbpass = getenv("DATABASE_PASSWORD");
    
    try{
        $dbc = new PDO("mysql:dbname=$dbname;host=$host;port=3306", $dbuser, $dbpass);
        $dbc->SetAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
      } catch(PDOException $e) {
        echo "Conneciton failed: " . $e->getMessage() . "<br/>";
      }  
    ?> 
    

    我收到以下错误:

    Conneciton failed: SQLSTATE[HY000] [2002] No such file or directory
    

    我将以下代码添加到测试数据库连接文件中:

    echo "X" . getenv('X');
    echo "host is " . $host;
    

    在终端中,我输入:php test.php

    它回声如下:

    Xhost is %
    

    这是一张屏幕截图:

    enter image description here

    我做错了什么?

    1 回复  |  直到 11 月前
        1
  •  1
  •   Matthew    11 月前

    这是由于 getenv putenv 默认情况下不使用Dotenv库填充。

    应使用 $_ENV 如果使用 createImmutable 函数,否则请在中查看文档 https://github.com/vlucas/phpdotenv?tab=readme-ov-file#putenv-and-getenv