【问题标题】:Wordpress white screen of death using vlucas/phpdotenv, trying to load .env variables使用 vlucas/phpdotenv 的 Wordpress 白屏死机,试图加载 .env 变量
【发布时间】:2020-06-22 13:41:48
【问题描述】:

我已经使用 RDS 在 EC2(Amazon 2 Linux)上设置了一个 Wordpress 站点,它运行良好。我现在正在尝试使用 https://github.com/vlucas/phpdotenv 从 .env 文件加载环境变量。

  1. wp-config.php 位于 /var/www(从 html 根目录向上一级)
  2. 我在 /var/www/ 中运行了 composer require vlucas/phpdotenv,现在我有了 /var/www/vendor、composer .json 和 .lock 文件。

composer.json:

{
    "require": {
        "vlucas/phpdotenv": "^4.1"
    }
}

我的 .env 文件如下(值已编辑):

DB_NAME=DBNAME
DB_USER=USERNAME
DB_PASS=PASSWORD
DB_HOST=HOSTNAME

我在 wp-config.php 的顶部添加了以下内容,但随后我得到了可怕的 Wordpress 白屏死机。

<?php
require_once(__DIR__ . '/vendor/autoload.php');
(new \Dotenv\Dotenv(__DIR__))->load();

我已经添加了我的环境变量,如下所示,但即使我恢复为手动输入,上面的代码也会显示白屏。

/** The name of the database for WordPress */
define( 'DB_NAME', getenv('DB_NAME'));

/** MySQL database username */
define( 'DB_USER', getenv('DB_USER'));

/** MySQL database password */
define( 'DB_PASSWORD', getenv('DB_PASS'));

/** MySQL hostname */
define( 'DB_HOST', getenv('DB_HOST'));

我做错了什么?

【问题讨论】:

  • Wordpress 自动加载和包管理不会让它那么容易发生。您可以尝试github.com/johnpbloch/wordpress-core-installer 之类的方法,其中 Composer 已经集成并可以与 Wordpress Core 一起使用。请参阅salferrarello.com/install-wordpress-with-composer 上的文章
  • 好的,我通过添加 if(file_exists(DIR . '/../vendor/autoload.php')) 并将代码包装在那。现在它不会识别数据库设置。似乎 getenv('DB_NAME') 不起作用。我检查了 .env 文件是否正确。
  • 只要./vendor/autoload.php 的相对路径正确,只需将require_once(__DIR__ . '/vendor/autoload.php');(new \Dotenv\Dotenv(__DIR__))-&gt;load(); 添加到wp-config.php 即可。要访问环境变量,您应该使用$_ENV['VARIABLE_NAME'] 而不是getenv('VARIABLE_NAME'),如github.com/vlucas/phpdotenv 的文档中所述。这对我来说非常适合 WordPress 5.8

标签: php wordpress dotenv


【解决方案1】:

尽管在过去 24 小时内拔掉了头发,但我还是设法修复了它。

if(file_exists(__DIR__ . '/vendor/autoload.php')) {
require_once __DIR__ . '/vendor/autoload.php';
$dotenv = Dotenv\Dotenv::createImmutable(__DIR__);
$dotenv->load();
}
if(file_exists(dirname(__DIR__) . '/vendor/autoload.php')) {
require_once dirname(__DIR__) . '/vendor/autoload.php';
$dotenv = Dotenv\Dotenv::createImmutable(__DIR__);
$dotenv->load();
}

我搜索后发现,使用 IF 语句检查文件和目录是否已经存在修复它。我的作曲家和 .env 都比网络根目录 (/var/www/html/) 高一级,所以我不需要更改它。

我还在.env 上加载了 vlucas 在他的 GitHub 页面上的代码示例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-20
    • 1970-01-01
    • 2021-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-26
    • 1970-01-01
    相关资源
    最近更新 更多