PHP: un file di configurazione in formato .ini o .php?

3

Sto lavorando su un enorme sistema CMS e mi sono chiesto quale formato di configurazione dovrei usare.

Ci sono due formati comuni per i file di configurazione. Il primo è un file INI, che contiene tutte le proprietà di configurazione. Quindi puoi semplicemente analizzare questo file INI usando le funzioni build in PHP. Una seconda opzione consiste nell'utilizzare un file PHP contenente un normale array PHP con queste proprietà di configurazione.

Ora, è più facile modificare un file INI, ma un file PHP offre più opzioni, ad esempio consente di aggiungere una funzione che recupera una delle opzioni di configurazione durante la lettura del file di configurazione.

Nota: il file di configurazione di PHP conterrà solo un array di configurazione, nessuna funzione di inizializzazione o altro. (Questo è ovviamente possibile, ma non è implementato per impostazione predefinita)

Ora, cosa mi consiglia di usare come file di configurazione? Qual è il formato più comune per un file di configurazione? Dovrei andare per semplicità con i file INI, o con uno più dinamico usando PHP.

Una cosa da notare, questo non è per uso personale. Sto pianificando di rilasciare il sistema CMS presto e molti siti Web sono già programmati per passare al mio sistema CMS.

    
posta Tim Visee 24.10.2013 - 15:06
fonte

6 risposte

17

I file INI hanno lo svantaggio di non rappresentare elegantemente strutture dati complesse come gli array. Pertanto sono utili solo per una configurazione molto semplice. L'utilizzo di un file PHP per la configurazione può essere visto come un problema di sicurezza: qualsiasi codice potrebbe essere inserito lì. Peggio ancora, un semplice errore di sintassi come dimenticare una citazione di chiusura potrebbe rendere inutilizzabile l'intera configurazione.

Esistono già formati di dati leggibili dall'uomo. XML è estremamente potente, ma eccessivamente dettagliato e non tutti i dati vengono mappati in modo pulito in XML. JSON è un altro formato eccellente, ma ha una sintassi molto rigida.

Ti esorto a considerare YAML. È estremamente facile da leggere e include JSON come sottoinsieme della sua sintassi.

this is a key: some value here
another key:
  - this is the first item in an array
  - another one
  - { inline: dictionary, has: values }
  - [ inline array, has, more, values]
  - "Quote this, if you like"

Ci sono molte altre funzionalità avanzate oltre a semplici dizionari e elenchi, il che rende questo formato molto flessibile.

    
risposta data 24.10.2013 - 15:34
fonte
5

Un altro grande motivo per andare con PHP - sicurezza. Se si espone il file .ini al webroot, la maggior parte delle tipiche configurazioni del server Web servirà quel file come un semplice file di testo che espone i segreti di configurazione della propria app. Un file php contenente puramente codice restituirà solo una pagina vuota, se non ti preoccupi di intraprendere alcuna procedura di sicurezza che è anche un'opzione perché ora sei in un linguaggio di programmazione che ti dà le opzioni.

    
risposta data 24.10.2013 - 22:20
fonte
3

Penso che sia necessario considerare le dimensioni e la complessità della configurazione necessaria,

Hai bisogno di leggerlo spesso? sempre?
Devi essere in grado di ignorare i dati in determinate circostanze?

Nella maggior parte dei casi farei un file php, specialmente se puoi mettere quel file al di fuori della radice del server web e come file di sola lettura.

YAML è bello, ma suppongo che può essere costoso elaborare il file di configurazione ad ogni richiesta, avresti bisogno di una sorta di cache, e che ovviamente aggiungerebbe complessità per qualcosa che potrebbe essere davvero semplice.

    
risposta data 24.10.2013 - 16:06
fonte
2

Vorrei andare con un file .php. Sebbene sia molto minimale, un file ini aggiunge ancora un sovraccarico a ogni caricamento della pagina man mano che viene aperto ed elaborato ogni volta che viene letto un valore. Anche se si carica l'intero file in memoria, si sta ancora facendo un lavoro extra cercando di capire. Avresti lo stesso problema con .xml o altro formato. Un file PHP verrebbe caricato una volta e quindi come bonus, memorizzato nella cache da qualsiasi sistema di caching PHP che potresti avere.

E davvero, c'è molta differenza tra questo:

somesetting = 1

e questo?

$somesetting = 1;

Entrambi sono altrettanto facili da gestire.

    
risposta data 24.10.2013 - 17:11
fonte
0

Hai detto che molti siti web sono già programmati per cambiare al tuo sistema CMS, quindi suona come una domanda per loro. Saranno gestiti da persone che programmano in modo analogo che sarebbe più comodo modificare un file INI che un file PHP con opzioni semplici? La perdita di velocità dall'analisi del file INI sarebbe un problema per loro? Preferirebbero la maggiore flessibilità che un file di configurazione PHP consentirebbe? Dovrebbero esserci problemi di sicurezza nell'utilizzo di un file INI? O forse dovresti consentire entrambi. Forse alcune persone apprezzeranno la facilità di modificare un file INI e altri il vantaggio di un file PHP. Sembra che i vantaggi di avere solo un file di configurazione PHP superino di solito quello di un file INI e quello di avere entrambi. Pertanto, potrebbe normalmente cercare solo un file PHP, ma nel caso in cui sia avviato con opzioni speciali, il sistema potrebbe essere istruito a cercare un file INI o anche entrambi. Se necessario, potrebbe essere istruito quale file di configurazione avrebbe la priorità più alta se alcune delle stesse opzioni di configurazione fossero presenti in entrambi.

    
risposta data 09.02.2015 - 08:05
fonte
0

Prova a rispondere a questa domanda individualmente per ogni file di configurazione. Una struttura di contenitori di dipendenze è in realtà anche una sorta di configurazione, ma chi potrebbe cambiare il file? Potrebbe essere solo un altro sviluppatore.

Scrivere un CMS significa che ci sono file di configurazione come le impostazioni di connessione al database e così via, che possono essere modificati da qualsiasi utente, ma sono più persone che lavorano al computer. Pensi che siano in grado di gestire tutti i messaggi "T inaspettati T_STRING"? Forse sì forse no. In questo caso, raccomando YAML come formato di configurazione per i non sviluppatori. Facile da leggere e quando creo progetti PHP con symfony, posso usare il componente di configurazione ( link ), che produce messaggi di errore che tutti comprendono. Definisci la tua analisi e convalida l'albero in PHP e se il file yaml non può essere analizzato hai il tuo messaggio.

Se la tua configurazione è per luser reale, potrebbe essere meglio usare INI.

    
risposta data 12.02.2015 - 00:47
fonte

Leggi altre domande sui tag