2009-04-28 9 views
10

Ho un'app scritta in PHP e ci sono un certo numero di variabili configurabili. Stiamo implementando una funzione in cui l'utente può creare serie di configurazioni e passare facilmente da una all'altra. Come dovrei memorizzare i miei documenti? come XML? in un file .ini? in più file .ini? in un db?come memorizzare le configurazioni per l'applicazione php - xml o ini o db

Cosa offre la massima flessibilità se aggiungiamo campi lungo la strada? Convenienza di codifica?

Se uso un db, dovrò usarne uno separato da quello principale dell'applicazione per ragioni che non vale la pena di approfondire, il che mi ha allontanato da questo. (Inoltre, stiamo usando i file .mdb per il nostro db.)

Sto seguendo la rotta xml, ma ho problemi con l'aggiunta e la modifica di configurazioni con SimpleXML. Inoltre, l'app deve essere compatibile con php 5.1.6 e sono un po 'nervoso per alcune delle funzionalità.

Mai veramente affrontato la creazione di file INI personalizzato ....

Una piccola precisazione: gli utenti non toccheranno i file - sono non-techie. Quindi, la configurazione dei file iniziali verrà eseguita da noi, ma poi stiamo scrivendo uno strumento che scriverà le loro configurazioni in qualsiasi formato scegliamo.

risposta

4

La memorizzazione delle impostazioni per un DB in un DB diverso non ha molto senso, IMO.

Vorrei scegliere un file ini, un file xml o un file php, come proposto da jmucchiello. Ogni opzione ha i suoi pro e contro. Come per xml contro ini, xml offre maggiore flessibilità ma è più difficile da mantenere (meno leggibile). Se le tue esigenze sono coperte da ini, segui la soluzione più semplice. Usa xml solo se hai bisogno di più di quanto i file ini possano offrirti.

Per quanto riguarda la soluzione php, valuterei la leggibilità da qualche parte tra ini e xml, ma sarebbe più difficile salvare le impostazioni correnti. Quindi, per quanto mi piaccia l'approccio, per il tuo attuale scenario non lo consiglierei.

+0

Un altro punto degno di nota è che un file config.php con errori di sintassi causa l'arresto anomalo dell'applicazione, a volte errori di spargimento (poiché il file di configurazione stesso diventa parte dell'applicazione). Usando .xml o .ini puoi scrivere il tuo codice parser per recuperare più facilmente da errori di sintassi all'interno della configurazione. – codemagician

1

Penso che la risposta qui dipenderà davvero dalla situazione individuale. Ci sono casi in cui ciascuna di queste sarebbe l'opzione migliore. Per il tuo caso particolare, xml sarebbe probabilmente il migliore. Ma dove xml brilla davvero su un file ini è se si hanno più opzioni correlate. Ad esempio, se è necessario conservare le informazioni di connessione per un database che dispone di nodi per le diverse parti della connessione al di sotto di un nodo per quella particolare connessione può essere più facile da leggere e mantenere. Dipende davvero dai dati.

Direi anche che un file xml sarebbe più semplice da utilizzare se si desiderava estrarre un singolo valore e non caricare l'intero file nella memoria all'inizio dell'applicazione.

2

In realtà, preferisco un file PHP eseguibile per la configurazione. Puoi fare un sacco di cose in un file eseguibile che non puoi realizzare facilmente usando le altre soluzioni. L'unico grande svantaggio di un file eseguibile è che l'amministratore deve essere esperto di PHP per poter modificare il file in modo sicuro. PHP può anche descrivere tipi di dati complessi nella configurazione poiché - è il codice.

DB è un problema perché è ancora necessario un file di configurazione esterno per trovare e connettersi al db.

XML è eccessivo per la configurazione.

I file INI funzionano ed è possibile utilizzare le librerie ini PHP per leggerli. Vedi parse_ini_file(). i file ini non si occupano molto bene di tipi di dati complessi.

EDIT in risposta a Itay Moav (commenti non formattare questo diritto):

<?php /* my config file */ 

$_CFG = Array(); /* problem solved */ 
$_CFG['key1'] = 'value1'; 
?> 
+1

e si rischia di avere sporcizia nel proprio ambito globale, e se per caso il registro globale è attivo, si ha una seria minaccia alla sicurezza. –

+0

Probabilmente la tua configurazione sarà nella portata globale, non importa quale. Ecco perché è la configurazione. E un semplice $ _CFG = Array(); nella parte superiore del file di configurazione risolve il problema register_globals. – jmucchiello

+0

non dobbiamo preoccuparci della sicurezza: questa viene compilata in un'app gestita localmente. – sprugman

5

avrei memorizzare gli elementi configurazioni in un file PHP. Questo è il metodo più flessibile utilizzato da I.

$config['website_url'] = 'google.com'; 

Ho poi hanno la seguente struttura di file

- config/development 
- config/production 

ho una costante definita nelle prime fasi del software chiamato IN_PRODUCTION, quando questo è TRUE si carichi fino le voci di configurazione di produzione e viceversa versa.

Questo è semplice e facilmente mantenibile.

-Mathew

+2

Si noti che se si memorizzano le variabili di configurazione in un file ini, è possibile ottenere facilmente i dati in un array associativo. $ config = parse_ini_file ("config.php"); – tj111

+0

Conosco parse_ini_file(), ma come posso scrivere una configurazione modificata nel file? (Ho visto varie classi e simili nei commenti su php.net, ma non ho trovato una funzione nativa che lo faccia.) – sprugman

+1

Ho letto da qualche parte che le funzioni json_decode e file_get_contents utilizzate insieme sono praticamente veloci come il parse_ini_file funziona da solo. Il che mi fa chiedere perché JSON non sarebbe un'opzione più frequente per memorizzare la configurazione in php. Certamente è più amichevole di xml e più succinta di ini. Inoltre, json è sensibile al tipo, ovvero i numeri decimali possono essere analizzati come numeri anziché come stringhe. Potrebbero probabilmente creare una funzione parse_json_file che sarebbe ancora più veloce in una futura revisione di php. –

0

vorrei andare per i file ini, sono umani leggibili, essi vengono analizzati molto veloce (e se la cache ....).
Certamente non XML. Meno leggibile, analizzato non così velocemente.
Non farei DB a causa della velocità.
Non utilizzare PHP vars perché consente di utilizzare l'ambito GLOBAL ...

0

Scrivere la propria classe di configurazione che carica i file di configurazione. Un buon esempio è il modo in cui CodeIgniter gestisce la configurazione.

http://codeigniter.com/user_guide/libraries/config.html

Si carica alcuni file di configurazione di default o si può caricare uno specifico con la classe Config.

È possibile scaricare il codice sorgente e dare un'occhiata a come lo fanno a fini didattici.

Un'altra opzione sarebbe quella di generare un file php con un array di configurazione dal database. Quindi è possibile amministrare tutte le opzioni e al salvataggio generare il file.

2

ho visto un post con la stessa domanda solo un momento fa, ecco una buona soluzione in follwing link. È una buona pratica raccogliere un codice utile. Credo. :)

Fare clic su iniHandler class per ottenere la classe gestore INI!

+0

sito Web non trovato – diEcho

Problemi correlati