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?
Respuesta
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
)
)
)
PHP tiene funciones para leer archivos .ini.
oo, bate por 10 segundos. :) –
Con copia pegar de los documentos php: P barato –
Hice un esfuerzo adicional, amable señor! ;) –
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.
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.
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 ...
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';
?>
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
Me refiero a ningún análisis manual, más la matriz se puede almacenar en caché en APC;) – Mario
En lugar de una matriz, ¿no sería mejor/más rápido usar una clase? –
- 1. ¿Cuál es la mejor de las aplicaciones de eventos django?
- 2. ¿Cuál es la mejor manera de mantener actualizadas las bibliotecas de JavaScript en los rieles?
- 3. ¿Cuál es la mejor manera de hacer que las bibliotecas compartidas estén disponibles para múltiples aplicaciones?
- 4. ¿Cuál es la mejor manera de depurar las aplicaciones de Calzado?
- 5. PHP ¿Cuál es la mejor manera de obtener las primeras 5 palabras de una cadena?
- 6. ¿Cuál es la mejor manera de administrar las fechas en PHP, MySQL, etc.?
- 7. ¿Cuál es la mejor manera de mantener un script PHP ejecutándose como daemon?
- 8. ¿Cuál es la mejor manera de mantener las contraseñas configurables, sin tenerlas fácilmente disponibles para el lector humano casual?
- 9. ¿Cuál es la mejor manera de traducir las babosas en las rutas de Rails
- 10. ¿Cuál es la mejor manera de comparar cadenas hash? (PHP)
- 11. Cuál es la mejor manera de paginar resultados en php
- 12. ¿Cuál es la mejor manera de centralizar y asegurar las cadenas de conexión?
- 13. ¿Es MVC la mejor manera de codificar aplicaciones asp.net?
- 14. ¿Cuál es la mejor forma de probar las aplicaciones de formularios web (ASP.NET)
- 15. models.py hacerse grande, ¿cuál es la mejor manera de romperlo?
- 16. ¿Cuál es la mejor manera de administrar las instalaciones de TYPO3 utilizando git?
- 17. ¿Cuál es la mejor manera de representar las reglas de horario de verano?
- 18. ¿Cuál es la mejor manera de ponerme al día con las últimas novedades en java?
- 19. ¿Cuál es la mejor manera de convencer a las personas para actualizar IE?
- 20. ¿Cuál es la mejor manera de declarar la asociación ordenada en las clases de dominio Grails?
- 21. ¿Cuál es la mejor manera de organizar múltiples subvistas?
- 22. Al usar Wordpress, ¿alguien puede decirme cuál es la mejor manera de desinfectar las entradas?
- 23. ¿Cuál es la mejor manera de iterar sobre las líneas de una cadena de Java?
- 24. Cuál es la mejor manera de cambiar las credenciales de un servicio de Windows usando C#
- 25. mejor manera de codificar las contraseñas en PHP
- 26. ¿Cuál es la diferencia entre las aplicaciones basadas en ventanas y las aplicaciones basadas en vista?
- 27. ¿Cuál es la mejor manera de manejar múltiples acciones?
- 28. ¿Cuál es la mejor manera de reutilizar el controlador/vistas MVC3 en múltiples aplicaciones?
- 29. ¿Cuál es la mejor manera de organizar las reglas de CSS?
- 30. ¿Cuál es la mejor manera de inicializar y usar contants en las clases de Python?
en realidad me topé con lo mismo, gracias Skippy! – helloandre
¡Me alegro de que esto pueda ayudar a otra persona! –