2009-02-08 12 views
6

Tengo una pequeña aplicación que estoy desarrollando, que es posible que desee dar/vender a otros. Deseo conservar algunas configuraciones y crear una interfaz de administrador para modificarlas. ¿Cuál sería la mejor manera de almacenarlos? Una tabla DB parece exagerada para las 10-20 configuraciones que tendré, y quiero que la recuperación de estas configuraciones sea lo más rápida posible. ¿Es un archivo plano otra opción viable? ¿Cuáles son los peligros asociados con el uso de un archivo plano? ¿Cuál sería la forma más rápida/más fácil de interactuar con un archivo plano que almacena múltiples claves y valores?¿Cuál es la mejor manera de mantener las clasificaciones de las aplicaciones PHP?

+0

en realidad me topé con lo mismo, gracias Skippy! – helloandre

+0

¡Me alegro de que esto pueda ayudar a otra persona! –

Respuesta

15

A menudo uso parse_ini_file de PHP para esto.

Así que si usted escribe un archivo .ini con esto:

; This is a sample configuration file 
; Comments start with ';', as in php.ini 

[first_section] 
one = 1 
five = 5 
animal = BIRD 

[second_section] 
path = "/usr/local/bin" 
URL = "http://www.example.com/~username" 

[third_section] 
phpversion[] = "5.0" 
phpversion[] = "5.1" 
phpversion[] = "5.2" 
phpversion[] = "5.3" 

y leerlo con este código PHP:

define('BIRD', 'Dodo bird'); 
$ini_array = parse_ini_file("sample.ini", true); 
print_r($ini_array); 

Usted recibirá esta salida:

Array 
(
    [first_section] => Array 
     (
      [one] => 1 
      [five] => 5 
      [animal] => Dodo bird 
     ) 

    [second_section] => Array 
     (
      [path] => /usr/local/bin 
      [URL] => http://www.example.com/~username 
     ) 

    [third_section] => Array 
     (
      [phpversion] => Array 
       (
        [0] => 5.0 
        [1] => 5.1 
        [2] => 5.2 
        [3] => 5.3 
       ) 

     ) 

) 
+0

+1 para todo el código de muestra – cbrulak

+0

Awesome response! ¡Rápido y completo! ¡Gracias! –

+0

¡Guau, no sabía esto! ¡Muchas gracias! – strager

0

Considere un objeto PHP (o matriz) serializado en un archivo. Sin código de análisis para escribir, lo suficientemente rápido, extensible. La única advertencia es pensar en una estrategia para "actualizar" el archivo de configuración a medida que su código crece para admitir configuraciones adicionales.

1

Creo que XML a través de SimpleXMLElement es muy útil para ese tipo de cosas.

La configuración (config.xml):

<config version="1"> 
    <foo>value</foo> 
    <bar> 
    <baz>Boo</baz> 
    </bar> 
</config> 

El código para leerla:

$config = simplexml_load_file('config.xml'); 
$version = (int) $config['version']; 
$foo = (string) $config->foo; 
$baz = (string) $config->bar->baz; 

código para escribir en un archivo:

$config = new SimpleXMLElement('<config version="1"/>'); 
$config->foo = 'value'; 
$config->bar->baz = 'Boo'; 
$config->asXML('config.xml'); 

El principal escollo de usar archivos planos es que podría conducir a una posible corrupción de datos en el bloqueo del script o la edición concurrente.

2

Realmente depende del tipo de "configuraciones" que desee almacenar. ¿Son configuraciones "bootstrap" como host de DB, puerto e inicio de sesión? ¿O son configuraciones de aplicaciones específicamente para su aplicación?

El problema de dejar que una interfaz de administrador escriba un archivo en el sistema de archivos son los permisos necesarios para escribir en el archivo. Cada vez que abre el servidor web para escribir archivos, aumenta la posibilidad de que un error en su código permita una escalada de privilegios severa.

Las bases de datos están diseñadas para permitir lecturas y escrituras sin introducir los posibles riesgos de seguridad del sistema.

Usamos archivos PHP "generados" para almacenar datos de configuración estáticos (como la información de acceso a la base de datos). Es generado por un script de utilidad por un usuario en la línea de comando. Después de eso, toda la información no estática se almacena en una tabla de base de datos. La tabla de la base de datos, a su vez, es fácil de actualizar desde un área de administración. Es fácil de ampliar y actualizar a medida que actualiza su ubicación de aplicación.

También es mucho más fácil centralizar los "datos" que necesitan copia de seguridad en un solo lugar.

¿Puedo sugerir el uso de memcached o algo similar para acelerarlo?

Sólo un par de pensamientos ...

0

simplemente utilizo una matriz PHP para los archivos de configuración.

<?php 
return array 
(
    'user' => 'name', 
    'pass' => 'word', 
    'one_day' => 60 * 60 * 24 
); 
?> 

Algunas de las ventajas son que, al igual morendil mencionado, sin análisis requerido, su tan rápido como se pone, se puede almacenar todo tipo de complejas variables/ecuaciones y se puede hacer lo siguiente:

<?php 
$config = include 'path/to/file.php'; 
?> 
+0

En realidad, el análisis * es * requerido, y se podría argumentar que el análisis y la ejecución del código PHP es una tarea más complicada que la extracción de cadenas para el archivo .ini. Aún así, estoy de acuerdo en que usar PHP es la forma más fácil. – che

+0

Me refiero a ningún análisis manual, más la matriz se puede almacenar en caché en APC;) – Mario

+0

En lugar de una matriz, ¿no sería mejor/más rápido usar una clase? –

Cuestiones relacionadas