Hola gente; este es mi primer mensaje en los foros de Maestrosdelweb. Veréis, soy programador de PHP y en la mayor parte de las aplicaciones que creo para mi empresa suelo utilizar una serie de rutinas para la inicialización de la aplicación, es decir, tengo preparadas una serie de rutinas para cargar el archivos de configuración, establecer rutas, parámetros varios.
Mi duda está en que no sé si lo que hago es lo más correcto o si por el contrario hay métodos más eficientes o al menos puedo mejorar algunas partes de estas rutinas de inicialización.
Os paso a explicar de forma lo más escueta posible lo que suelo hacer:
El proceso de inicialización se basa en dos archivos básicamente:
- config.inc.php
- init.inc.php
El primero de ellos contiene los típicos parámetros de configuración de la aplicación. Un ejemplo de
config.inc.php puede ser el siguiente:
Código PHP:
/**
* SERVIDOR DE BASES DE DATOS
*/
$config['tipoBDD'] = 'mysql';
$config['hostBDD'] = 'localhost';
$config['nombreBDD'] = 'mibdd';
$config['usuarioBDD'] = 'yomismo';
$config['claveBDD'] = 'miclave';
/**
* NIVEL DE REPORTE DE ERRORES
*/
$config['nivelErrores'] = E_ALL ^ E_NOTICE;
/**
* OTROS
*/
$config['idiomaPorDefecto'] = 'es';
$config['tituloWeb'] = 'Mi SuperAplicación';
$config['rutaBase'] = $_SERVER['DOCUMENT_ROOT'] . '/';
$config['webURI'] = 'http://' . $_SERVER['SERVER_NAME'] . '/';
$config['rutaArchivos'] = $config['rutaBase'] . 'almacen/';
$config['rutaLog'] = $config['rutaBase'] . 'log/';
¿Cómo le véis? Estoy abierto a cualquier sugerencia/crítica/obsrvación/pregunta...
Por su parte el archivo "
init.inc.php" es el que se encarga de establecer las rutas por defecto de la aplicación, cargar el archivo config, establecer el nivel de errores indicado en config, cargar clases básicas, iniciar el buffer de salida, etc. Aquí os dejo un ejemplo:
Código PHP:
/**
* CARGA DE RUTAS
*/
define('RUTA_BASE', $_SERVER['DOCUMENT_ROOT'] . '/');
define('RUTA_CLASES_BASE', RUTA_BASE . 'lib/class/');
define('RUTA_INCLUDES_BASE', RUTA_BASE . 'lib/inc/');
set_include_path(
get_include_path() . PATH_SEPARATOR
. RUTA_CLASES_BASE . PATH_SEPARATOR
. RUTA_INCLUDES_BASE . PATH_SEPARATOR
);
/**
* ARCHIVO DE CONFIGURACION
*/
require_once('config.inc.php');
/**
* NIVEL DE REPORTE DE ERRORES
*/
error_reporting($config['nivelErrores']);
/**
* CARGA DE CLASES DE SESION
* Necesarias previa inicializacion de la sesion porque van a formar parte de vbles de sesion
*/
require_once('apli/UsuarioSistema.class.php');
/**
* CARGA DE CLASES BASICAS
* Clases de uso general a lo largo de la aplicacion
*/
require_once('LDFW-1.0/LDFW_DBException.class.php');
require_once('LDFW-1.0/LDFW_Cadena.class.php');
require_once('LDFW-1.0/LDFW_Debug.class.php');
/**
* CONTROL DE EXCEPCIONES NO CONTROLADAS
*/
function controlExcepcionNoControlada($e){
//Descartamos el contenido actual de la pagina
ob_end_clean();
//Incluimos la pagina de error que podra hacer uso de $e
require_once("error.inc.php");
}
set_exception_handler('controlExcepcionNoControlada');
/**
* INICIO DE CONTROL DE BUFFER DE SALIDA
*/
ob_start();
/**
* CONEXION CON BASE DE DATOS
*/
require_once('DB.php');
$tipoBDD = $config['tipoBDD'];
$hostBDD = $config['hostBDD'];
$nombreBDD = $config['nombreBDD'];
$usuarioBDD = $config['usuarioBDD'];
$claveBDD = $config['claveBDD'];
$dsn = "$tipoBDD://$usuarioBDD:$claveBDD@$hostBDD/$nombreBDD";
$DB = DB::connect($dsn);
if(PEAR::isError($DB)){
die("Error conectando a la base de datos: ".$DB->getMessage());
}
$DB->query("SET NAMES 'utf8'");
Por supuesto, el archivo "init.inc.php" es llamado desde todas las páginas de la aplicación. Alguno de vosotros se preguntará por qué no incluyo el inicio de sesión (session_start) en el init. Necesito hacerlo fuera porque en algunos casos suelo pasar objetos en variables de sesión y si los archivos que contienen la definición de las clases de dichos objetos no están incluidos antes de iniciar la sesión, surgen errores. Que yo sepa no podemos tener un objeto cargado en una variable de sesión si previamente no se ha hecho un "include" del archivo que contiene la clase.
Os agradecería enormemente que me contarais qué os parece este método y los pasos que sigo en el mismo.
Un saludo y gracias!