我使用phpfog.com进行托管,使用github.com进行问题跟踪等。我有两个远程设置,一个到phpfog.com,另一个到github。
在phpfog的后端管理中,您可以定义环境变量。我在那里做了,并想在我的wp配置文件中使用它们。
这是我使用的代码:
/** 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);
必须有一种更干净的方法来做到这一点…
您可以通过将函数结果作为不带中间变量的常数值传递来使其长度减半:
define('AUTH_KEY', getenv('AUTH_KEY'));
或者循环进行:
$vars = array('AUTH_KEY', 'SECURE_AUTH_KEY', ...);
foreach ($vars as $var) {
define($var, getenv($var));
}
我更喜欢使用下面的方法:
<?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);
}
?>
来自WordPress 5.5.0
WordPress为环境变量添加了一个新函数,其中包含3个不同的可能值。
您可以使用wp_get_environment_type()
函数来获取当前环境。
用法示例:
If(wp_get_environment_type() === 'development') {
// do something
} else {
// do something
}
默认情况下,如果WP_ENVIRONMENT_TYPE
为空或无效(除了development
、staging
和production
之外的任何内容),则返回production
。
您可以通过wp-config.php
文件定义development
或staging
环境。
define( 'WP_ENVIRONMENT_TYPE', 'development' );
使用环境变量控制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');
(DotenvDotenv::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文件不存在,则从适用于云部署的环境中提取值。
你可以试试这个:
-添加一个";。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'] );