2010-06-01 4 views
2

Je développe un centre d'administration où je peux éditer des fichiers de configuration (écrits en PHP). Je ne veux pas stocker ces valeurs dans une table mySQL (pour diverses raisons). Donc, dire que mon config.php a contenu comme:Modification de PHP en utilisant PHP (centre d'administration)

<?php 
    $option1 = 1; 
    $option2 = 2; 
    $option4 = 5; 
    $option7 = array('test','a','b',c'); 
    ?> 

dire maintenant dans l'une des pages d'administration, je vais seulement changer quelques valeurs comme option2 ou option4 etc. Toutes les idées sur ce qui serait la meilleure façon d'aller à propos de ça.

Je sais qu'une option est de lire complètement le fichier PHP et d'écrire des parties en utilisant REGEX. Tout moyen de rendre cela plus efficace? Je ne veux pas que le fichier config.php casse à cause d'une erreur de la part de l'utilisateur. Des idées sur la façon de s'assurer que cela fonctionne?

+1

Je vous recommande d'utiliser un tableau pour la configuration à la place et l'enregistrement/chargement avec serialize/unserialize, de cette façon vous auriez pas besoin de faire une analyse syntaxique, ni auriez-vous besoin d'utiliser une base de données. – Turnor

Répondre

2

Si vous avez une certaine liberté quant à la manière dont vous stockez les valeurs de configuration, vous pouvez utiliser des fichiers ini. Tout ce que vous avez à faire est de charger le contenu du fichier ini dans un tableau avec parse_ini_file, puis de modifier les valeurs dans ce tableau et enfin écraser le fichier avec de nouvelles valeurs, comme décrit dans this comment.

Pour des raisons de sécurité évidentes, il est judicieux de placer ces fichiers hors de la racine de votre document.

exemple de contenu

de fichier ini:

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

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

exemple de code (en utilisant la fonction safefilewrite):

<?php 
$ini_file = '/path/to/file.ini'; 
$ini_array = parse_ini_file($ini_file); 

$ini_array['animal'] = 'CAT'; 

safefilerewrite($file, implode("\r\n", $ini_array)); 
?> 
+0

+1 Pour les données de configuration de base, les fichiers INI ou les fichiers XML (ou les données codées JSON) doivent en effet suffire. Bien que vous puissiez également créer un fichier PHP dynamique (qui est toujours écrasé) contenant les données de configuration si vous pensez que l'analyse de l'INI/XML/JSON est trop lourde. Beaucoup d'options, tout va fonctionner: p. – wimvds

1

var_export() est probablement la fonction que vous recherchez.

0

Vous pouvez écrire/lire les paramètres dans un fichier en utilisant le code suivant:

$content = array(); 
//fill your array with settings; 
$fh = fopen ($bashfile, 'w') or die ("can't open file"); 
fwrite ($fh, $content); 
fclose ($fh); 

de le lire vous utilisez: file_get_contents() // ceci retourne une valeur de chaîne OU ligne par ligne :

$lines = file('file.txt'); 
//loop through our array, show HTML source as HTML source; and line numbers too. 
foreach ($lines as $line_num => $line) { 
print "Line #<b>{$line_num}</b> : " . htmlspecialchars($line) . "<br />\n"; 
}