¿La forma más rápida de almacenar datos de configuración fácilmente editables en PHP?


¿Cuál es la forma más rápida de almacenar datos de configuración en PHP para que sean fácilmente cambiables (a través de PHP)? Primero pensé en tener config.archivo php, pero no puedo editarlo sobre la marcha con PHP, al menos no muy simplemente? Luego pensé en tener archivos XML, pero analizarlos para cada solicitud HTTP es abrumador. Por lo tanto, pensé en los archivos INI, pero luego me di cuenta de que los archivos INI están restringidos a los valores int/string. Al final, he llegado a la conclusión de que el archivo codificado JSON es el mejor:

$config['database']['host'] = ...;
$config['another']['something'] = ...;
...
json_encode($config);

Dado que JSON puede almacenar matrices, puedo crear configuraciones bastante complejas con él, y analiza más rápido que los archivos INI.

Mi pregunta: ¿me perdí algo o hay una mejor manera de hacer esto?

Author: Tower, 2010-01-06

7 answers

Serializar es una mejor opción que JSON para almacenar variables PHP.

Me gusta usar var_export para guardar el archivo de configuración, y usar include para cargar información de configuración. Esto hace que sea fácil guardar los datos de configuración de forma progresiva Y también hace que los datos sean fáciles de leer/escribir para una persona:

Config.php:

return array(
 'var1'=> 'value1',
 'var2'=> 'value2',
);

Prueba.php:

$config = include 'config.php';
$config['var2']= 'value3';
file_put_contents('config.php', '<?php return ' . var_export($config, true) . ';');

Configuración actualizada.php ahora contiene lo siguiente:

return array(
 'var1'=> 'value1',
 'var2'=> 'value3',
);
 37
Author: leepowers,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-01-19 12:06:00

Debe usar serialize en lugar de json_encode:

Http://docs.php.net/serialize

 2
Author: Inspire,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-01-06 19:52:26

La forma en que almaceno la configuración es poner algunas variables en un externo .archivo php y luego cuando quiero usar esos archivos, digo:

<?php include("fileName"); ?>

Y eso le permitiría compartir información de configuración a través de muchas páginas. Sin embargo, no estoy seguro de que este sea el método más eficiente, pero me pareció el más fácil.

 2
Author: zmbush,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-01-06 19:55:34

Aunque lo más probable es que sea exagerado para lo que buscas, lo que tiendo a hacer es almacenar los datos de configuración en una base de datos usando una clase PHP para controlar los cambios en los pares nombre/valor dentro. (es decir: No hay acceso directo a la base de datos desde fuera de esta clase.)

Cuando se hace una llamada a la clase PHP config para cambiar un valor, esto escribe un archivo PHP include estándar con todos los diversos valores definidos en él.

Como tal, no hay golpe de rendimiento de tiempo de carga al leer el los datos de configuración y todos los datos de configuración se pueden cambiar dentro de la base de datos a través de un módulo CMS.

 2
Author: John Parker,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-01-06 21:03:06

Estoy bastante seguro de que tiene razón sobre los valores int/string y sí, JSON es una forma, pero serializar y no serializar una cadena será más rápido para la optimización de la velocidad:

Este enlace te ayudará:

Http://docs.php.net/serialize

 0
Author: ninu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-01-06 19:56:10

Utilizo una base de datos con una tabla llamada config o settings. La tabla tiene dos columnas:

name [varchar(255)]
value [varchar(255)]

Esto permite el fácil almacenamiento de int, float y cadenas cortas.

Luego creo dos funciones, GetSetting y SetSetting. Estos almacenan una fila y recuperan una fila, respectivamente. Me parece que esto simplifica enormemente el almacenamiento de valores.

 0
Author: Nathan Osman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-01-06 21:27:02

Si utiliza require en lugar de include para el archivo de configuración, obtendrá un poco de rendimiento. Puede hacer esto si sabe que el archivo de configuración siempre estará en su lugar, o cuando tenga su propio mecanismo para verificar si existe.

 0
Author: Martien de Jong,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-09-12 17:12:59