Rob*_*rds 8 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);
/** ------------------------------------=-----*/
Run Code Online (Sandbox Code Playgroud)
必须有一个更清洁的方式这样做......
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));
}
Run Code Online (Sandbox Code Playgroud)
Ash*_*dav 15
从 WordPress 5.5.0 开始
WordPress 为环境变量添加了一个新函数,具有 3 个不同的可能值。
您可以使用wp_get_environment_type()函数来获取当前环境。
使用示例:
If(wp_get_environment_type() === 'development') {
// do something
} else {
// do something
}
Run Code Online (Sandbox Code Playgroud)
默认情况下,返回ifWP_ENVIRONMENT_TYPE为空或无效(除development, staging&之外的任何内容production) 。production
您可以通过文件定义development或staging环境wp-config.php。
define( 'WP_ENVIRONMENT_TYPE', 'development' );
Run Code Online (Sandbox Code Playgroud)
zer*_*kms 12
您可以将函数结果作为常量值传递两次,而不使用中间变量:
define('AUTH_KEY', getenv('AUTH_KEY'));
Run Code Online (Sandbox Code Playgroud)
或者在循环中执行此操作:
$vars = array('AUTH_KEY', 'SECURE_AUTH_KEY', ...);
foreach ($vars as $var) {
define($var, getenv($var));
}
Run Code Online (Sandbox Code Playgroud)
小智 6
我更喜欢在下面使用这种方法:
<?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);
}
?>
Run Code Online (Sandbox Code Playgroud)
使用环境变量控制 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);
}
Run Code Online (Sandbox Code Playgroud)
.env 文件看起来像这样......
# MySQL settings
DB_NAME=wpbench
DB_USER=wpuser
DB_PASSWORD=password
DB_HOST=localhost
DB_CHARSET=utf8
DB_COLLATE=
Run Code Online (Sandbox Code Playgroud)
在 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'));
Run Code Online (Sandbox Code Playgroud)
使用 APP_ENV 变量在变量集之间切换。例如创建 .env. Production 和 .env.staging 文件。如果 .env 文件不存在,则从适合云部署的环境中提取值。