Il modo più veloce per archiviare dati di configuration facilmente modificabili in PHP?

Qual è il modo più veloce per memorizzare i dati di configuration in PHP in modo che sia facilmente modificabile (tramite PHP)? Per prima cosa ho pensato di avere il file config.php, ma non posso modificarlo su fly con PHP, alless non molto semplicemente? Poi ho pensato di avere file XML, ma l'analisi per ciascuna richiesta HTTP è schiacciante. Quindi, ho pensato ai file INI, ma poi ho capito che i file INI sono limitati ai valori int / string. Alla fine, sono giunto alla conclusione che il file codificato JSON è il migliore:

$config['database']['host'] = ...; $config['another']['something'] = ...; ... json_encode($config); 

Poiché JSON è in grado di archiviare arrays, posso creare configurazioni abbastanza complesse con esso e analizza più velocemente dei file INI.

La mia domanda: mi sono perso qualcosa o c'è un modo migliore per farlo?

Serialize è un'opzione migliore di JSON per l'archiviazione di variables PHP.

Mi piace usare var_export per salvare il file di configuration e usare include per caricare le informazioni di configuration. Ciò semplifica il salvataggio dei dati di configuration in modo progressivo e rende i dati di facile lettura / scrittura anche per una persona:

config.php:

 return arrays( 'var1'=> 'value1', 'var2'=> 'value2', ); 

test.php:

 $config = include 'config.php'; $config['var2']= 'value3'; file_put_contents('config.php', '<?php return ' . var_export($config, true) . ';'); 

Aggiornato config.php ora contiene quanto segue:

 return arrays( 'var1'=> 'value1', 'var2'=> 'value3', ); 

Dovresti usare serialize invece di json_encode:

http://docs.php.net/serialize

Il modo in cui memorizzo la configuration consiste nel mettere alcune variables in un file .php esterno e poi quando voglio usare quei file, dico:

<?php include("fileName"); ?>

E questo ti permetterebbe di condividere le informazioni di configuration su più pagine. Non sono, tuttavia, sicuro che questo sia il metodo più efficiente, ma mi è sembrato il più facile.

Mentre è più probabile che si tratti di overkill per quello che si sta cercando, ma quello che tendo a fare è memorizzare i dati di configuration in un database usando una class PHP per controllare le modifiche alle coppie nome / valore all'interno. (es .: non esiste un accesso diretto al DB da questa class.)

Quando viene effettuata una chiamata alla class di configuration PHP per modificare un valore, questo scrive un file di inclusione PHP standard con tutti i vari valori definiti su di esso.

Pertanto, non si verificano picchi di performance in termini di carico durante la lettura dei dati di configuration e tutti i dati di configuration possono essere modificati all'interno del database tramite un module CMS.

Sono abbastanza sicuro che tu abbia ragione sui valori int / string e sì, JSON è un modo, ma serializzare e non serializzare una string sarà più veloce per l'ottimizzazione della velocità:

Questo link ti aiuterà a:

http://docs.php.net/serialize

Io uso un database con una tabella chiamata config o impostazioni. La tabella ha due colonne:

 name [varchar(255)] value [varchar(255)] 

Ciò consente la facile memorizzazione di int, float e stringhe corte.

Quindi creo due funzioni, GetSetting e SetSetting. Questi memorizzano una row e recuperano una row, rispettivamente. Trovo che questo semplifica enormemente la memorizzazione dei valori.

Se usi require invece di include per il file di configuration, otterrai un po 'di performance. Puoi farlo se sai che il file di configuration sarà sempre sul posto o quando hai il tuo meccanismo per verificare se esiste.