在Wordpress wp-config中使用环境变量

时间:2012-02-15 20:38:15

标签: php wordpress phpfog

我正在使用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);
/** ------------------------------------=-----*/

必须有一种更清洁的方式......

UPDATE! 以下是zerkms

清理后的代码
$dbvalues = array('DB_HOST', 'DB_NAME', 'DB_USER', 'DB_PASSWORD');
/** -------------------------------------------------------------*/
foreach ($dbvalues as $dbvalue) {
    define($dbvalue, getenv($dbvalue));
}

$saltykeys = array('AUTH_KEY', 'SECURE_AUTH_KEY', 'LOGGED_IN_KEY', 'NONCE_KEY', 'AUTH_SALT', 'SECURE_AUTH_SALT' , 'LOGGED_IN_SALT', 'NONCE_SALT' );
/** -------------------------------------------------------------*/
foreach ($saltykeys as $saltykey) {
    define($saltykey, getenv($saltykey));
}

4 个答案:

答案 0 :(得分:11)

你可以缩短两倍,将函数结果作为常量值传递,而不使用中间变量:

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

或者在循环中这样做:

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

答案 1 :(得分:2)

来自 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

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

define( 'WP_ENVIRONMENT_TYPE', 'development' );

答案 2 :(得分:1)

我更喜欢使用以下方法:

apiVersion: v1
kind: Service
metadata:
  name: httpd
spec:
  ports:
    - port: 80
      targetPort: 80
      name: http
      protocol: TCP
    - port: 443
      targetPort: 443
      name: https
      protocol: TCP
  selector:
    app: httpd
  externalIPs:
    - 10.128.0.2  # VM's internal IP

答案 3 :(得分:1)

使用环境变量控制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文件不存在,则将从适合云部署的环境中提取值。