J'ai une petite application que je développe, que je pourrais donner/vendre à d'autres. Je souhaite conserver certains paramètres et créer une interface d'administration pour les modifier. Quel serait le meilleur moyen de les ranger? Une table DB semble être trop compliquée pour les 10-20 paramètres que je vais avoir, et je veux que la récupération de ces paramètres soit aussi rapide que possible. Un fichier plat est-il une autre option viable? Quels sont les pièges associés à l'utilisation d'un fichier plat? Quel serait le moyen le plus rapide/le plus facile de s'interfacer avec un fichier plat stockant plusieurs clés et valeurs?Quelle est la meilleure façon de conserver les paramètres d'application PHP?
Répondre
J'utilise souvent parse_ini_file
de PHP pour cela.
Donc, si vous écrivez un fichier .ini avec ceci:
; 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"
et le lire avec ce code PHP:
define('BIRD', 'Dodo bird');
$ini_array = parse_ini_file("sample.ini", true);
print_r($ini_array);
Vous obtiendrez cette sortie:
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 a des fonctions pour lire les fichiers .ini.
oo, battu de 10 secondes. :) –
Avec la pâte de copie du doc php: P bon marché –
Je suis allé le mile supplémentaire, gentil monsieur! ;) –
Considérons un objet PHP (ou tableau) sérialisé dans un fichier. Pas de code d'analyse à écrire, assez rapide, extensible. Le seul inconvénient est de penser à une stratégie pour "mettre à jour" le fichier de paramètres à mesure que votre code se développe pour prendre en charge d'autres paramètres.
Je pense que XML via SimpleXMLElement est très utile pour ce genre de chose.
La configuration (config.xml):
<config version="1">
<foo>value</foo>
<bar>
<baz>Boo</baz>
</bar>
</config>
Le code pour le lire:
$config = simplexml_load_file('config.xml');
$version = (int) $config['version'];
$foo = (string) $config->foo;
$baz = (string) $config->bar->baz;
Code pour écrire dans un fichier:
$config = new SimpleXMLElement('<config version="1"/>');
$config->foo = 'value';
$config->bar->baz = 'Boo';
$config->asXML('config.xml');
Le principal écueil de l'utilisation de fichiers plats est que cela pourrait conduire à une corruption possible des données lors d'un crash de script ou d'une édition simultanée.
Cela dépend vraiment du type de "paramètres" que vous souhaitez stocker. Sont-ils des paramètres "bootstrap" comme l'hôte DB, le port et la connexion? Ou sont-ils des paramètres d'application spécifiques à votre application?
Le problème de laisser une interface d'administration écrire un fichier sur le système de fichiers est les autorisations nécessaires pour écrire dans le fichier. Chaque fois que vous ouvrez le serveur Web pour écrire des fichiers, vous augmentez la possibilité qu'une erreur dans votre code puisse permettre une escalade de privilèges sévère.
Les bases de données sont conçues pour autoriser les lectures et les écritures sans présenter les risques potentiels de sécurité du système.
Nous utilisons des fichiers PHP "générés" pour stocker les données de configuration statiques (comme les informations d'accès à la base de données). Il est généré par un script utilitaire par un utilisateur sur la ligne de commande. Après cela, toutes les informations non statiques sont stockées dans une table de base de données. La table de base de données, à son tour, est facile à mettre à jour à partir d'une zone d'administration. Il est facile de l'étendre et de le mettre à niveau lorsque vous mettez à niveau votre application.
Il est également beaucoup plus facile de centraliser les «données» qui doivent être sauvegardées en un seul endroit. Puis-je suggérer d'utiliser memcached ou quelque chose de similaire pour l'accélérer?
Juste une pensée couple ...
J'utilise simplement un tableau PHP pour les fichiers de configuration.
<?php
return array
(
'user' => 'name',
'pass' => 'word',
'one_day' => 60 * 60 * 24
);
?>
Certains des avantages sont que, comme morendil mentionné, pas l'analyse syntaxique nécessaire, son aussi vite que possible, vous pouvez stocker toutes sortes de variables/équations complexes et vous pouvez effectuer les opérations suivantes:
<?php
$config = include 'path/to/file.php';
?>
En fait, l'analyse * est * obligatoire, et on pourrait faire valoir que l'analyse et l'exécution de code PHP est une tâche plus compliquée que l'extraction de chaînes pour le fichier .ini. Pourtant, je suis d'accord que l'utilisation de PHP est le moyen le plus facile. – che
Je veux dire pas d'analyse manuelle, plus le tableau peut être mis en cache dans APC;) – Mario
Au lieu d'un tableau, ne serait-il pas préférable/plus rapide d'utiliser une classe? –
- 1. Quelle est la meilleure façon d'utiliser l'API Twitter via PHP?
- 2. Quelle est la meilleure façon de stocker les paramètres de l'application? (MVC)
- 3. Quelle est la meilleure façon de lire les données CSV?
- 4. Quelle est la meilleure façon de tester les services WCF?
- 5. Quelle est la meilleure façon de gérer les exceptions ObjectDataSource?
- 6. Dans Spree (Rails E-commerce App) quelle est la meilleure façon de limiter les paramètres régionaux?
- 7. Quelle est la meilleure façon de gérer les paramètres (configuration) dans ASP.NET 2.0?
- 8. quelle est la meilleure façon de php pour inverser les lettres dans les mots
- 9. En C#, quelle est la meilleure façon d'enchaîner les constructeurs?
- 10. Quelle est la meilleure façon d'examiner les fichiers access.log d'apache?
- 11. Quelle devrait être la meilleure façon de charger les paramètres de la base de données?
- 12. Quelle est la meilleure façon de paginer les résultats en php
- 13. Quelle est la meilleure façon de créer des vignettes à partir de la vidéo en PHP?
- 14. Quelle est la meilleure façon d'automatiser le remplacement de texte?
- 15. Quelle est la meilleure façon de trouver l'inverse de datetime.isocalendar()?
- 16. Quelle est la meilleure façon de différencier Crystal Reports?
- 17. Quelle est la meilleure façon de commencer avec NHibernate?
- 18. quelle est la meilleure façon de marquer un texte?
- 19. Quelle est la meilleure façon de déboguer un Oracle SP?
- 20. Quelle est la meilleure façon de créer des déploiements ClickOnce
- 21. Quelle est la meilleure façon de diviser deux objets TimeSpan?
- 22. Quelle est la meilleure façon de formater C# dans WordPress?
- 23. Quelle est la meilleure façon de chiffrer un clob?
- 24. Quelle est la meilleure façon de faire ce programme Java?
- 25. Quelle est la meilleure façon de vider un répertoire?
- 26. Quelle est la meilleure façon de lire GetResponseStream()?
- 27. Quelle est la meilleure façon d'exposer l'API de mon serveur?
- 28. Quelle est la meilleure façon de trier par date?
- 29. Quelle est la meilleure façon de rafraîchir un indice Nutch?
- 30. Quelle est la meilleure façon de gunzip fichiers avec Perl?
En fait, j'ai juste couru dans la même chose, merci Skippy! – helloandre
Glad cela pourrait aider quelqu'un d'autre! –