PHP DOTENV导致WordPress配置运行两次



我有一个相对复杂的laravel项目,其中我在侧面安装了一个由作曲家安装的博客的WordPress安装。

在我的 wp-config.php中,我在我的配置目录中使用了一个名为 application.php的文件(用于组织目的(。我有各种define('XXX', 'config stuff');案例,文件中有类似的情况。当硬编码" config stugp"时,网站的工作原理非常完美,但是最近我试图使用作曲家安装的dotenv来从我的.env使用getenv((

从我的.env中提取值
require_once(LARAVEL_PATH . '/vendor/autoload.php');
$dotenv = new DotenvDotenv(APP_ROOT_DIR);
$dotenv->load();

当我 var_dump我的 getenv('example_env_constant')时,它给我正确的值绝对可以。因此,我在整个application.php文件中都设置这些。

但是现在,当我加载网站时,我会得到大量

Notice: Constant XXX_XXXX_XXX already defined in /path/to/application.php on line X

每个define('XXX', value);

一个

以及

Cannot modify header information

测试时,我发现我的wp-config.php文件正在运行一次。但是以某种方式我的application.php正在运行两次。第一次运行是从我的 wp-config.php中的inclage call中进行的。触发错误的第二次运行在第326行的wp-settings.php中发生

do_action( 'plugins_loaded' );

我不知道这是怎么发生的。

如果我从application.php中删除DotEnv代码,而将其直接放入我的wp-config.php中,则行为完全相同,wp-config.php运行一次,并且application.php运行两次。

现在,如果我删除了application.php并将所有代码放入wp-config.php中,则传统上是WP配置。然后,我再次得到完全相同的问题,它引用了已删除的文件...这当然表示此时存在缓存问题,尽管我认为缓存不是原始问题的原因。使用WP CLI运行缓存冲洗不起作用,因为它实际上可以在冲洗时遇到application.php的相同错误。没关系,无论还是首先,缓存是禁用的。这不是一个浏览器缓存问题,也可以作为一个新的隐身Chrome实例,而硬刷新没有任何区别。

这是一本很长的读物,对此很抱歉,我希望我足够清楚。我对这种情况的发生感到非常困惑,并且任何帮助或调试的帮助或技巧都将很棒。也许我错过了一些非常明显的东西,因为似乎将Dotenv用于我的WP配置会以我从未见过的方式彻底打破所有内容。最糟糕的情况是最糟糕的,我会回到硬编码WP-Config文件

更新:

我错误地删除application.php文件不停止相关错误。它阻止了要求错误,但我得到了其他错误。如果我只是删除了application.php的内容,那么我没有区别。

有些问题是错误的,如果有人只有任何调试建议,将不胜感激

文件:

  • public/help-advice/wp-config.php

  • config/application.php

  • WordPress安装在公共/help-Advice/wp

  • 非作曲家生成的WP文件在public/help-advice/app中或公共/帮助奖励

粘贴代码,如果您不能使用pastebin:

这是config.php

<?php
/**
 * The base configuration for WordPress
 *
 * The wp-config.php creation script uses this file during the
 * installation. You don't have to use the web site, you can
 * copy this file to "wp-config.php" and fill in the values.
 *
 * This file contains the following configurations:
 *
 * * MySQL settings
 * * Secret keys
 * * Database table prefix
 * * ABSPATH
 *
 * @link https://codex.wordpress.org/Editing_wp-config.php
 *
 * @package WordPress
 */
 /*
  * Caching
  */
define('WP_CACHE', true);
define('LARAVEL_PATH', dirname(__FILE__) . '/../..'); // Make sure this is pointed to same server
require_once(LARAVEL_PATH . '/vendor/autoload.php');
require_once(LARAVEL_PATH . '/config/application.php');
require_once(ABSPATH . 'wp-settings.php');

这是application.php

<?php
//This file pulls in data for WP and is included in the wp-config.php file within help-advice
/*
 * Base paths
 */
define('APP_ROOT_DIR', dirname(__DIR__));
// $dotenv = new DotenvDotenv(APP_ROOT_DIR);
// $dotenv->load();
// this one above works but causes this file to run twice causing errors, the one below errors
// if (file_exists(APP_ROOT_DIR . '/.env')) {
//     DotenvDotenv::load(APP_ROOT_DIR);
// }
define('APP_PUBLIC_DIR', APP_ROOT_DIR . '/public/help-advice');
define('APP_STORAGE_DIR', APP_ROOT_DIR . '/storage');
define('APP_LOG_DIR', APP_STORAGE_DIR . '/logs');

// ** MySQL settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define('DB_NAME', 'redacted');
/** MySQL database username */
define('DB_USER', 'redacted');
/** MySQL database password */
define('DB_PASSWORD', 'redacted');
/** MySQL hostname */
define('DB_HOST', '127.0.0.1');
/** Database Charset to use in creating database tables. */
define('DB_CHARSET', 'utf8mb4');
/** The Database Collate type. Don't change this if in doubt. */
define('DB_COLLATE', '');
/**#@+
 * Authentication Unique Keys and Salts.
 *
 * Change these to different unique phrases!
 * You can generate these using the {@link https://api.wordpress.org/secret-key/1.1/salt/ WordPress.org secret-key service}
 * You can change these at any point in time to invalidate all existing cookies. This will force all users to have to log in again.
 *
 * @since 2.6.0
 */
define('AUTH_KEY',         'redacted');
define('SECURE_AUTH_KEY',  'redacted');
define('LOGGED_IN_KEY',    'redacted');
define('NONCE_KEY',        'redacted');
define('AUTH_SALT',        'redacted');
define('SECURE_AUTH_SALT', 'redacted');
define('LOGGED_IN_SALT',   'redacted');
define('NONCE_SALT',       'redacted');

/*
 * Debugging/errors
 */
define('APP_DEBUG', (boolean) getenv('APP_DEBUG'));
// Always log errors
ini_set('log_errors', 1);
ini_set('error_log', APP_LOG_DIR . '/wp_debug.log');
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', false);
define('WP_DEBUG_DISPLAY', APP_DEBUG);
define('SCRIPT_DEBUG', APP_DEBUG);
/*
 * URLs
 */
define('WP_SITEURL', 'http://' . $_SERVER['HTTP_HOST'].'/help-advice/wp');
define('WP_HOME', 'http://' . $_SERVER['HTTP_HOST'].'/help-advice');
/*
 * Custom Content Directory (/public/help-advice/app)
 */
define('CONTENT_DIR', '/app');
define('WP_CONTENT_DIR', APP_PUBLIC_DIR . CONTENT_DIR);
define('WP_CONTENT_URL', WP_HOME . CONTENT_DIR);

//google analytics
define('GA_PROPERTY_ID',getenv('GA_PROPERTY_ID'));
/**#@-*/
/**
 * WordPress Database Table prefix.
 *
 * You can have multiple installations in one database if you give each
 * a unique prefix. Only numbers, letters, and underscores please!
 */
$table_prefix  = 'wp_';
/* That's all, stop editing! Happy blogging. */
/** Absolute path to the WordPress directory. */
if ( !defined('ABSPATH') )
    define('ABSPATH', dirname(__FILE__) . '/../public/help-advice/wp/');

我不知道为什么它运行两次或由do_action触发('plugins_loaded'(;在第二次运行中。

由于这是一个相当独特的构建/情况,我不希望这很容易解决,也不要使几个人都需要这种情况。因此,我没有继续将头发撕掉,而是在application.php中的每个定义中添加了一张检查,以查看它是否已经存在,如果是这样,则不重新定义。示例:if (!defined('WP_DEBUG')) {define('WP_DEBUG', true);}

我还因添加到application.php的dotenv而丢失的Advanced-Cache.php中会遇到错误,不知道为什么,尤其是因为我从未安装或与Advanced-Cache有任何关系。因此,我只是简单地禁用此define('WP_CACHE', false);

相关内容

  • 没有找到相关文章

最新更新