Uso de variables de entorno en WordPress wp-config

4 minutos de lectura

avatar de usuario
Roberto C Edwards

Estoy usando phpfog.com para alojamiento y github.com para el seguimiento de problemas, etc. Tengo dos configuraciones remotas, una para phpfog.com y la otra para github.

En el administrador de back-end de phpfog puede definir variables de entorno. Lo hice allí y quiero usarlos en mi archivo wp-config.

Aquí está el código que usé:

/** 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);

Debe haber una forma más limpia de hacer esto…

  • no, lo siento, solo olvidé aceptar la respuesta … ¡gracias!

    – Robert C. Edwards

    16 de febrero de 2012 a las 2:45

  • Pregunté sobre problemas antes de Di mi respuesta 😉

    – zerkms

    16 de febrero de 2012 a las 2:51

avatar de usuario
zerkms

Podría hacerlo la mitad de largo pasando el resultado de la función como un valor constante sin variable intermedia:

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

O haz eso en un bucle:

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

  • ah, genial… esa es la sintaxis que me faltaba

    – Robert C. Edwards

    15 de febrero de 2012 a las 21:52

  • pierdes la compatibilidad con IDE al definir constantes en un bucle

    – Okneloper

    22 de marzo de 2017 a las 17:49

avatar de usuario
Óscar Aléncar

Prefiero usar este enfoque a continuación:

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

?>

  • Me gusta esto y sugeriría separar seach env en su propio archivo y luego include aquí, especialmente si usa git y el sistema de revisión de código. Mantiene las cosas ordenadas.

    – Señal

    9 de diciembre de 2021 a las 0:18

Desde WordPress 5.5.0

WordPress ha agregado una nueva función para las variables de entorno con 3 valores posibles diferentes.

Puedes usar wp_get_environment_type() función para obtener el entorno actual.

Ejemplo de uso:

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

Por defecto, si WP_ENVIRONMENT_TYPE está vacío o no es válido (cualquier cosa excepto development, staging & production), production es regresado.

Puedes definir development o staging medio ambiente a través de la wp-config.php expediente.

define( 'WP_ENVIRONMENT_TYPE', 'development' );

La mejor manera de usar variables de entorno para controlar su entorno WP es usando DotEnv ( https://github.com/vlucas/phpdotenv )

Este enfoque se presenta en una publicación de blog: https://m.dotdev.co/asegure-su-wordpress-config-with-dotenv-d939fcb06e24

El enfoque básico es crear un archivo .env en la raíz de su sitio con las variables de entorno.

Sin embargo, hay algunos problemas con la publicación del blog, ya que la versión 5 de DotEnv ya no usa variables de entorno de forma predeterminada.

Entonces, en lugar del código usado en la publicación del blog, use este en la parte superior de su archivo wp-config.php…

$app_env = getenv("APP_ENV");
$file = $app_env == null ? ".env" : ".env.".$app_env;
if(file_exists(__DIR__."https://stackoverflow.com/".$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);
}

El archivo .env se ve así…

# MySQL settings

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

La definición de las constantes en el archivo wp-config.php se ve así…

/** 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'));

Utilice la variable APP_ENV para cambiar entre conjuntos de variables. Por ejemplo, cree archivos .env.production y .env.staging. Si el archivo .env no existe, los valores se extraen del entorno, lo que funciona bien para la implementación en la nube.

¿Ha sido útil esta solución?