【发布时间】:2019-08-23 03:37:20
【问题描述】:
我使用.env 文件作为数据库连接变量。我无法在 GitHub 上共享 .env 文件,所以我需要使用 Heroku 变量配置(我将它们设置为本地 .env 文件)。但是当我打电话给getenv('VAR_NAME') 我得到了
无法读取任何环境文件
因为没有任何.env 文件。如何使用 PHP 访问 Heroku 变量?
编辑:我正在使用这个包:https://github.com/vlucas/phpdotenv
这是我的代码:
require_once __DIR__ . '../../vendor/autoload.php';
use PDO;
use Dotenv\Dotenv as Dotenv;
public function getConnection()
{
$this->db_connection = null;
try
{
$dotenv = Dotenv::create(__DIR__ . '/..');
$dotenv->load();
$this->db_connection = new PDO("mysql:host=" . getenv('DB_HOST') . ";dbname=" . getenv('DB_DATABASE'), getenv('DB_USERNAME'), getenv('DB_PASSWORD'));
$this->db_connection->exec("set names utf8");
}
catch(PDOException $exception)
{
echo "Connection error: " . $exception->getMessage();
}
return $this->db_connection;
}
__DIR__ . '/..' 是.env 文件的本地化
Laravel 框架也有 .env 文件,但如果 .env 文件不存在,它会创建一个后置脚本:
(composer.json)
"scripts": {
"post-root-package-install": [
"@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
]
}
当我停止使用 Dotenv 类时,它开始工作。
【问题讨论】:
-
PHP 的标准
getenv()与.env文件没有任何关系。它从 环境 中获取一个变量。一些工具填充环境来自.env文件,但getenv()本身并不查看这些文件。但是您引用的错误专门讨论了环境files,这意味着您没有使用标准getenv()。请edit您的问题并澄清它。理想情况下,我们想要minimal reproducible example。 -
另外,“我将它们设置为本地
.env文件”是什么意思,这与 Heroku 的配置变量有什么关系? -
请说明您如何初始化
Dotenv。 -
您是否能够使用下面显示的答案来解决这个问题?如果是这样,请记住accept it。这会向其他用户显示您找到了解决方案。
标签: php heroku composer-php environment-variables