my_config.ini vs my_config.php

Al lavoro usiamo un file .ini per impostare le variables prima di call il resto del framework (penso che vada

function getConfigVars(){ //read my_config.ini file .... //call framework } 

e mi sono sempre chiesto se ci fosse un vantaggio nel farlo in quel modo.

Mi sembra quindi che tu debba scrivere regole di accesso per impedire alle persone di guardarlo dal web e php deve analizzarlo e comprenderlo.

Quindi, perché usare my_config.ini piuttosto che my_config.php? Non è come se qualcuno wheresse toccarlo dopo che è stato configurato e sembra più conveniente call semplicemente le variables e avere la possibilità che il tuo IDE completi automaticamente il text ovunque tu stia usando le variables ini / lo analizzi per gli errori.

Zend Framework contiene un'analisi di configuration che analizza i file scritti nel formato ini ( Zend_Config_Ini ), sembra che questo sia quello che stai usando.

Il file di configuration non deve trovarsi nella root del documento e, se non si trova nella root del documento, non sono richieste regole di riscrittura poiché nessuno può accedervi comunque.

Il formato INI è specializzato per fornire sia la possibilità di disporre di una gerarchia di chiavi dei dati di configuration che di ereditarietà tra le sezioni dei dati di configuration. Le gerarchie dei dati di configuration sono supportte separando le chiavi con il carattere punto o punto (.). Una sezione può estendersi o ereditare da un'altra sezione seguendo il nome della sezione con un carattere di due punti (:) e il nome della sezione da cui i dati devono essere ereditati.

Dalla pagina Zend_Config_Ini .

Zend Framework lo utilizza per consentire di avere più parametri di configuration, uno per la gestione temporanea, uno per lo sviluppo e uno per la produzione. Ciò consente inoltre di configurare facilmente le impostazioni del database per la produzione, lo sviluppo e due impostazioni molto diverse. Vengono individuati diversi routes impostati nel file ini in cui sono inclusi. Questo rende molto più facile spostare il codice dallo sviluppo alla produzione, sapendo che immediatamente tutto ciò che è in fase di sviluppo verrà distriggersto.

Certo, questo sarebbe ansible con uno script PHP, ma richiederebbe più analisi delle varie variables di configuration e fare se / poi verificare, mentre usare parse_ini_file () fa tutto questo automaticamente.

Le altre risposte hanno già evidenziato che i non programmatori possono aver bisogno di modificare variables o qualcosa sul sito Web impostato come variabile di configuration (ad esempio, titolo del sito che viene utilizzato nel layout dei siti). I file INI sono facili da capire e leggere anche per qualcuno che non ha mai programmato prima.

Esempio da un sito Web al momento sto lavorando:

 [production] phpSettings.display_startup_errors = 0 phpSettings.display_errors = 0 includePaths.library = APPLICATION_PATH "/../library" bootstrap.path = APPLICATION_PATH "/Bootstrap.php" bootstrap.class = "Bootstrap" resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers" resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts" resources.db.adapter = "PDO_SQLITE" resources.db.params.dbname = APPLICATION_PATH "/../data/db/users.db" resources.view[] = [staging : production] [testing : production] phpSettings.display_startup_errors = 1 phpSettings.display_errors = 1 resources.db.params.dbname = APPLICATION_PATH "/../data/db/users-testing.db" [development : production] phpSettings.display_startup_errors = 1 phpSettings.display_errors = 1 resources.db.params.dbname = APPLICATION_PATH "/../data/db/users-dev.db 

Rende estremamente facile avere più serie di dati per i vari ambienti in cui è ansible eseguire il codice.

Per coloro che vengono a questa domanda perché vogliono sapere se ci sono delle differenze nelle performance tra l'uso di un file INI che deve essere analizzato e un file PHP che è semplicemente incluso (e può essere memorizzato nella cache da PHP): Sì, ci sono differenze ma sono così piccoli che non import davvero.

Il mio scenario di riferimento è un file config.ini con 20 coppie chiave / valore e un file config.php con le stesse 20 coppie chiave / valore scritte come definite. La versione di PHP è 5.4.9 su Ubuntu Linux 13.04.

 key1 = value1 ... key20 = value20 

vs.

 <?php define("key1", "value1"); ... define("key2", "value20"); 

Due script di test inclusi i configs:

 <?php $CONF = parse_ini_file("config.ini"); 

vs.

 <?php require_once "config.php"; 

Ho testato le performance con ab -c 25 -n 10000 .

Risultato senza cache PHP:

 ini: Requests per second: 2660.89 [#/sec] (mean) php: Requests per second: 2642.28 [#/sec] (mean) 

Risultato con cache PHP APC:

 ini: Requests per second: 3294.47 [#/sec] (mean) php: Requests per second: 3307.89 [#/sec] (mean) 

Ho eseguito i test più volte, naturalmente i numbers variano each volta, ma il consenso è: config.ini è un po 'più veloce quando non viene usata la cache PHP, config.php è un po' più veloce quando si usa una cache PHP. Ma la differenza è così piccola che la decisione non dovrebbe essere basata sulle performance.

La tua domanda solleva un punto equo, per essere sicuro.

Alcuni punti a favore dei file .ini :

  • Usa il file con un'altra lingua . Se hai mai desiderato di avere uno script Perl, Python, Ruby, ecc., Fare qualcosa che è particolarmente facile con quel linguaggio e necessario per accedere alle impostazioni del progetto non ti sarebbero utili se avessi memorizzato le tue impostazioni in un file PHP.

  • Modifica umana dei dati . Anche se l'hai respinto nella tua domanda, le intenzioni o no è molto probabile che qualcuno possa finire a frugare lì e potrebbe non essere un individuo tecnico. Il formato INI è molto less spaventoso del codice PHP, anche se è solo un insieme di dichiarazioni variables

  • Aggiornamento delle impostazioni . Penso che sia molto più facile creare un nuovo file INI piuttosto che scrivere un file PHP. Questo è piuttosto soggettivo, tuttavia, ma vale la pena menzionarlo.

  • Relazione tra le variables di impostazione . È abbastanza facile / intuitivo dare alle proprie impostazioni una gerarchia con un file INI. Anche se ciò sarebbe ansible anche con PHP, non è così pulito e può diventare sgradevole se si sta tentando di creare arrays associativi profondamente annidati per archiviare le informazioni.

In aggiunta a quelli, il knock on INI di "wherer proteggerlo contro l'accesso al web" non è rilevante nella maggior parte degli scenari in quanto la maggior parte dei progetti PHP (alless quelli di cui faccio parte) tengono una buona quantità di codice lontano dalla root cartella, e le impostazioni di solito vanno lì.

Beh, potrebbe essere più facile per un programmatore non modificare le variables di configuration … Se è necessario sul posto di lavoro.

Ho scoperto che il posizionamento accurato di <?php e ?> Può impedirne la visualizzazione, mentre il file parse_ini_file () continua a ricevere i dati rilevanti dal file.

Il modo migliore per renderlo sicuro, è posizionarlo sopra il docroot e negare l'accesso a * .ini nella configuration del server.