Contenido

Ficheros de configuración dependientes del servidor

29 sep

+ 15

Cuando desarrollamos una aplicación, generalmente trabajamos, inicialmente en local con unos datos para conectar a la base datos, unos ficheros con datos, unas rutas diferentes,… y esto suele provocar ediciones de fichero para que al subirlo a producción (al servidor online) no provoquen un error.

Una solución sencilla que podemos usar es la siguiente:

<?php
    // Nombre del fichero 
    $configfile = $_SERVER["SERVER_NAME"].".php";

    // Cargamos el fichero
    if (file_exists($configfile)) require $configfile;
    else die("Fichero ".$configfile." no existe");

?>

De esta forma podemos tener 2 ficheros con los datos necesarios para conectar en ambas bases de datos, con las rutas correctas para cada servidor,… completamente independientes. En mi caso, los ficheros son:

  1. localhost.php
  2. www.anieto2k.com.php

Automáticamente al entrar en la aplicación, comprobaremos $_SERVER["SERVER_NAME"] y cargaremos el fichero que sea oportuno.

Es una tontería, pero yo estuve mucho tiempo modificando los ficheros antes de subirlos y volviendo a modificarlos al volver a descargarlos :D

  • Eso se suele llamar los environments, y por lo normal se suelen tener, como mínimo 3: production, development y test, cada uno de ellos con sus configuraciones propias (e.g., cacheo, modo de mailing y tal :P).

  • Andrés:

    Me pareció muy buena tu solución:

    Creo que voy a hacer un híbrido con tu método (de determinar la configuración mediante el HOST) y el mio para sumar la ventaja de tener la configuración centralizada en un sólo archivo y evitar un “require” innecesario.

    Lo que yo venía usando hasta ahora es algo parecido a esto:

    
    $appMode = 'dev';
    
    if ( $appMode == 'dev' ) :
    
    	$dbServer = 'localhost';
    	$dbUser = 'root';
    	$dbPass = 'thepassword';
    	$dbName = 'dbname';
    
    	$title = "Website title";
    	$urlBase = "http://localwebsite/";
    
    else :
    
    	$dbServer = 'ddbb.site.com';
    	$dbUser = 'theuser';
    	$dbPass = 'thepassword';
    	$dbName = 'dbname';
    	$title = "Website title";
    	$urlBase = "http://www.site.com/";
    
    endif;
    

    Saludos!

  • Siempre puedes usar ANT para automatizar la tarea de substitución. A mi me funciona de fábula.

  • Yo casi siempre preparo mis enviroments de configuración en variables/matrices y hago una detección condicional del SERVER_NAME para declarar constantes de config como MYSQL_DB, o SMTP_USER…

    Tampoco tengo que modificar archivos de configuración ni nada..

  • con ese script, tendrías que tener 3 archivos o bien hacer una condición de que si el dominio no lleva las “www” que lo ponga, por lo contrario te saldría el error de que no tienes el fichero de configuración.

    Yo lo suelo hacer como Sebatian V. un fichero y un if acompañado de un array de las ips o dominio que son de desarrollo.

  • Bueno, una solución ideal para WordPress y el wp-config.php para poder mudarlo de servidor, y dominio sin preocupaciones:

    
    // Chequeo de Servidor
    $localserver = ($_SERVER['SERVER_NAME'] === 'servidor.local');
    
    // ** Configuracion de MySQL ** //
    define('DB_NAME', 'wp_db');     // el nombre de la base de datos
    define('DB_USER', ($localserver ? 'root' : 'local'));     // tu nombre de usuario de MySQL
    define('DB_PASSWORD', ($localserver ? 'root' : 'local')); // ...y tu contraseña
    define('DB_HOST', 'localhost');     // hay un 99% de probabilidades de que no necesites cambiar esto
    define('DB_CHARSET', 'utf8');
    define('DB_COLLATE', '');
    
    // ** Configuración de dominio ** //
    define('WP_SITEURL', "http://{$_SERVER['SERVER_NAME']}"); 
    define('WP_HOME', "http://{$_SERVER['SERVER_NAME']}");
    
  • sencillo, pero muy muy práctico. Empezaré a usarlo desde ya…

  • Pero no sirve con subdominios!
    http://www.server.com
    w3.server.com
    server.com
    otro.server.com…
    Tenés alguna forma piola de manejarlo?

  • @Ernesto: Quizás tengas una configuración que no permita hacer esto. He hecho una prueba y me ha ido perfectamente.
    http://edad.anieto2k.com/server.php

    Saludos

  • @aNieto2k: Pues es que es lo contrario a eso el problema.
    Como haces cuando tienes varios subdominios que usan la misma configuración. Supongo que no usas una para cada subdominio…
    w3.server.com, http://www.server.com y server.com deben usar la misma configuración….

  • @aNieto2k: A mi igual me funcionó, y sin problemas

  • Anieto,

    Me parece que esta automatización funcionará solo si usas la aplicación en el root del dominio.

    En todo caso no es “la solución” para el promedio de proyectos que corren en carpetas, a menos claro que hagas esos environments con configuración previa.

    Saludo

Comentar

#

Me reservo el derecho de eliminar y/o modificar los comentarios que contengan lenguaje inapropiado, spam u otras conductas no apropiadas en una comunidad civilizada. Si tu comentario no aparece, puede ser que akismet lo haya capturado, cada día lo reviso y lo coloco en su lugar. Siento las molestias.