2009-02-08 5 views
6

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?

+0

En fait, j'ai juste couru dans la même chose, merci Skippy! – helloandre

+0

Glad cela pourrait aider quelqu'un d'autre! –

Répondre

15

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 
       ) 

     ) 

) 
+0

+1 pour tout l'exemple de code – cbrulak

+0

Super réponse! Rapide et complet! Merci! –

+0

Wow, je ne le savais pas! Merci beaucoup! – strager

0

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.

1

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.

2

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 ...

0

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'; 
?> 
+0

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

+0

Je veux dire pas d'analyse manuelle, plus le tableau peut être mis en cache dans APC;) – Mario

+0

Au lieu d'un tableau, ne serait-il pas préférable/plus rapide d'utiliser une classe? –

Questions connexes