php - Drupal 8 Settings.php 中特定于环境的数据库连接配置
问题描述
我正在尝试将环境变量传递给Drupal中的数据库配置的settings.php文件,我能够访问环境变量并将它们存储到变量中,并将这些变量传递给settings.php中的数据库数组
如果我将数组打印到控制台,它打印得很好,但是在访问网站 Apache 日志时会出现以下错误
我尝试使用 getenv() 直接传递 env 变量 将 env 变量传递给另一个变量并将该新变量传递给数据库数组 将变量转换为 UTF-8 编码并将其传递给数据库数组
如果我对数据库配置值进行硬编码,它可以正常工作,但是当我尝试通过 env 变量读取它时它不起作用!我无法理解为什么当值通过似乎没问题时为什么不工作
错误日志堆栈
Drupal\\Core\\Database\\DatabaseAccessDeniedException: SQLSTATE[HY000] [1045] Access denied for user ''@'localhost' (using password: NO) in /var/www/html/core/lib/Drupal/Core/Database/Driver/mysql/Connection.php on line 427
Settings.php 中的代码
$vars = array(
'DB_HOST',
'DB_USERNAME',
'DB_PASSWORD',
'DB_PORT'
);
foreach($vars as $var) {
if(!isset($_ENV[$var]) && getenv($var)){
$_ENV[$var] = getenv($var);
}
}
$username = mb_convert_encoding($_ENV['DB_USERNAME'], "UTF-8");
$password = mb_convert_encoding($_ENV['DB_PASSWORD'], "UTF-8");
$host = mb_convert_encoding($_ENV['DB_HOST'], "UTF-8");
$port = mb_convert_encoding($_ENV['DB_PORT'], "UTF-8");
$databases['default']['default'] = array (
'database' => 'a_16a7f4a6-74a2-4066-aaa6-c0f4029f9a9f',
'username' => $username,
'password' => $password,
'prefix' => '',
'host' => $host,
'port' => $port,
'namespace' => 'Drupal\\Core\\Database\\Driver\\mysql',
'driver' => 'mysql',
);
print_r($databases);
当我运行它显示的 php 文件时输出
Array
(
[default] => Array
(
[default] => Array
(
[database] => a_16a7f4a6-74a2-4066-aaa6-c0f4029f9a9f
[username] => root
[password] => root
[prefix] =>
[host] => localhost
[port] => 3306
[namespace] => Drupal\Core\Database\Driver\mysql
[driver] => mysql
)
)
)
解决方案
推荐阅读
- kotlin - 可以在 kotlin 中用字符串获取颜色吗?
- python - 带有任意大小障碍物的矩阵右下角的方式数向右或向下跳跃
- android - 在 ViewPager 中的片段之间传递数据,但触发器位于 MainActivity
- python - Python函数在排序列表中查找第一个非负数?
- c++ - std::multimap 上的 emplace_hint 是否保留等效元素的相对顺序?
- python - Python subprocess.call() 异常后保持子进程窗口打开
- r - 关于 purrr::walk 的困惑
- php - 获取Ajax打开模态,进行PHP函数调用并将结果放入模态
- windows - 即使在代码更改后,Flutter 仍会继续运行默认的“计数器应用程序”(Windows 应用程序)
- wordpress - 如何配置使用 WPML 的“每种语言的不同域”的 dockerized wordpress nginx?