【问题标题】:Using Environment variables in Wordpress wp-config在 Wordpress wp-config 中使用环境变量
【发布时间】:2012-02-15 20:38:14
【问题描述】:

我使用 phpfog.com 进行托管,使用 github.com 进行问题跟踪等。 我有两个遥控器,一个到 phpfog.com,另一个到 github。

在 phpfog 的后台管理中你可以定义环境变量。我在那里这样做并想在我的 wp-config 文件中使用它们。

这是我使用的代码:

/** Hardened Salts for use on github.com, phpfog.com, etc.*/
$AUTH_KEY = getenv('AUTH_KEY');
$SECURE_AUTH_KEY = getenv('SECURE_AUTH_KEY');
$LOGGED_IN_KEY = getenv('LOGGED_IN_KEY');
$NONCE_KEY = getenv('NONCE_KEY');
$AUTH_SALT = getenv('AUTH_SALT');
$SECURE_AUTH_SALT = getenv('SECURE_AUTH_SALT');
$LOGGED_IN_SALT = getenv('LOGGED_IN_SALT');
$NONCE_SALT = getenv('NONCE_SALT');
define('AUTH_KEY', $AUTH_KEY);
define('SECURE_AUTH_KEY', $SECURE_AUTH_KEY);
define('LOGGED_IN_KEY', $LOGGED_IN_KEY);
define('NONCE_KEY', $NONCE_KEY);
define('AUTH_SALT', $AUTH_SALT);
define('SECURE_AUTH_SALT', $SECURE_AUTH_SALT);
define('LOGGED_IN_SALT', $LOGGED_IN_SALT);
define('NONCE_SALT', $NONCE_SALT);

必须有一种更清洁的方式来做到这一点……

【问题讨论】:

  • 不,抱歉刚刚忘记接受答案……谢谢!
  • 我问过问题之前我给出了答案;-)

标签: php wordpress phpfog


【解决方案1】:

您可以通过将函数结果作为不带中间变量的常量值传递来使其长度减半:

define('AUTH_KEY', getenv('AUTH_KEY'));

或者循环执行:

$vars = array('AUTH_KEY', 'SECURE_AUTH_KEY', ...);
foreach ($vars as $var) {
    define($var, getenv($var));
}

【讨论】:

  • 啊,很好……这就是我缺少的语法
  • 在循环中定义常量时失去 IDE 支持
【解决方案2】:

我更喜欢在下面使用这种方法:

<?php

//GET HOSTNAME INFO
$hostname = $_SERVER['SERVER_NAME']; 

//VERIFY WHICH ENVIRONMENT THE APP IS RUNNING
switch ($hostname) {
    case 'development.dev':
        define('WP_ENV', 'development');
        define('WP_DEBUG', true);
        break;
    case 'staging.mywebsite.com':
        define('WP_ENV', 'staging');
        define('WP_DEBUG', true);
        break;
    case 'www.mywebsite.com':
        define('WP_ENV', 'production');
        define('WP_DEBUG', false);
        break;
    default:
        define('WP_ENV', 'production');
        define('WP_DEBUG', false);
}

?>

【讨论】:

  • 我喜欢这个,并建议将 seach env 分离到它自己的文件中,然后在这里 include 他们,尤其是如果你使用 git 和代码审查系统。保持整洁。
【解决方案3】:

来自 WordPress 5.5.0

WordPress 为具有 3 种不同可能值的环境变量添加了一个新函数。

您可以使用wp_get_environment_type()函数获取当前环境。

使用示例:

If(wp_get_environment_type() === 'development') {
 // do something
} else {
 // do something
}

默认情况下,如果WP_ENVIRONMENT_TYPE 为空或无效(除developmentstagingproduction 之外的任何内容),则返回production

您可以通过wp-config.php 文件定义developmentstaging 环境。

define( 'WP_ENVIRONMENT_TYPE', 'development' );

【讨论】:

    【解决方案4】:

    使用环境变量控制 WP 环境的最佳方法是使用 DotEnv (https://github.com/vlucas/phpdotenv)

    此方法在博客文章中进行了阐述:https://m.dotdev.co/secure-your-wordpress-config-with-dotenv-d939fcb06e24

    基本方法是使用环境变量在站点的根目录中创建一个 .env 文件。

    但是,由于 DotEnv 版本 5 默认不再使用环境变量,因此博客文章存在一些问题。

    因此,不要使用博客文章中使用的代码,而是在 wp-config.php 文件的顶部使用它...

    $app_env = getenv("APP_ENV");
    $file = $app_env == null ? ".env" : ".env.".$app_env;
    if(file_exists(__DIR__.'/'.$file))
    {
        require_once(__DIR__ . '/vendor/autoload.php');
        (Dotenv\Dotenv::createUnsafeImmutable(__DIR__,$file))->load();
        error_log("Environment loaded from ".$file);
    } else {
        error_log("*WARNING* environment file not found: ".$file);
    }
    

    .env 文件如下所示...

    # MySQL settings
    
    DB_NAME=wpbench
    DB_USER=wpuser
    DB_PASSWORD=password
    DB_HOST=localhost
    DB_CHARSET=utf8
    DB_COLLATE=
    

    在 wp-config.php 文件中定义常量看起来像这样...

    /** 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_PASSWORD'));
    
    /** MySQL hostname */
    define( 'DB_HOST', getenv('DB_HOST'));
    
    /** Database Charset to use in creating database tables. */
    define( 'DB_CHARSET', getenv('DB_CHARSET'));
    
    /** The Database Collate type. Don't change this if in doubt. */
    define( 'DB_COLLATE', getenv('DB_COLLATE'));
    

    使用 APP_ENV 变量在变量集之间切换。例如创建 .env.production 和 .env.staging 文件。如果 .env 文件不存在,则从适用于云部署的环境中提取值。

    【讨论】:

    • 感谢您的链接。需要稍微修改一下,特别是getenv('ENV_KEY')的使用,应该换成$_SERVER['ENV_KEY']
    • @tsega 我在这个问题上苦苦挣扎。尽管 DotEnv 文档中弃用了环境变量不是线程安全的,但我还是决定使用 get_env()。如果环境变量不改变,线程安全无关紧要。而且它们不应该改变......它们是静态配置的一部分。您需要环境变量来在 Azure 等云服务上配置 WP。
    猜你喜欢
    • 1970-01-01
    • 2020-07-23
    • 1970-01-01
    • 2019-04-02
    • 1970-01-01
    • 1970-01-01
    • 2020-08-16
    • 1970-01-01
    • 2022-12-19
    相关资源
    最近更新 更多