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

4ktjp1zp  于 2023-05-12  发布在  PHP
关注(0)|答案(5)|浏览(154)

我使用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);

一定有更干净的方法。。

afdcj2ne

afdcj2ne1#

你可以通过将函数结果作为一个不带中间变量的常量值传递来缩短一半的长度:

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

或者在一个循环中这样做:

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

qq24tv8q2#

来自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' );
l7mqbcuq

l7mqbcuq3#

我更喜欢使用下面的方法:

<?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);
}

?>
e4yzc0pl

e4yzc0pl4#

使用环境变量控制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.生产和.env.暂存文件。如果.env文件不存在,则从环境中提取值,这对于云部署很有效。

hlswsv35

hlswsv355#

你可以试试这个:

  • 添加一个“.env”文件到根文件夹,并添加您的秘密变量
DB_NAME=my_db_name
DB_USER=root
DB_PASSWORD=root
DB_HOST=localhost
  • 更新wp-config.php以获得此
$env = [];
if( file_exists( '.env' ) && count( parse_ini_file( '.env' ) ) > 0 ) {
    $env = parse_ini_file( '.env' );
} else {
    echo "no env";
    exit;
}

define( 'DB_NAME', $env['DB_NAME'] );
define( 'DB_USER', $env['DB_USER'] );
define( 'DB_PASSWORD', $env['DB_PASSWORD'] );

相关问题