Mysql
 sql >> Database >  >> RDS >> Mysql

Come creare un file di configurazione globale?

Ognuno ha le proprie preferenze. Preferisco memorizzare le impostazioni del mio DB in un .ini al di fuori del webroot e quindi assegnargli un valore chmod 0600, per impedire a chiunque tranne il proprietario di leggerlo.

Un esempio .ini sarà simile a:

[database]
driver = mysql
host = localhost
;port = 3306
schema = yourdbname
username = dbusername
password = some_pass

Quindi puoi utilizzare la funzione php parse_ini_file quindi nel tuo costruttore lo leggi e lo analizzi in un array:

public function __construct($file = 'dbsettings.ini')
{
    // @todo: change this path to be consistent with outside your webroot
    $file = '../' . $file;

    if (!$settings = parse_ini_file($file, TRUE)) throw new exception('Unable to open ' . $file . '.');

    $dns = $settings['database']['driver'] .
    ':host=' . $settings['database']['host'] .
    ((!empty($settings['database']['port'])) ? (';port=' . $settings['database']['port']) : '') .
    ';dbname=' . $settings['database']['schema'];

    // if not PDO, this part needs to be changed parent::__construct($dns, $settings['database']['username'], $settings['database']['password']);
}

E viola, hai un modo semplice e sicuro per configurare la connessione al database. Questa classe è stata presa da una classe extender PDO, quindi se non stai usando PDO devi cambiare quella riga, ma come puoi vedere ottieni il nome utente ecc in un $settings Vettore.

Eviterei ALTAMENTE di archiviare qualsiasi tipo di informazione di database in un CONSTANT o GLOBAL tipo variabile. In questo modo, le $settings è disponibile solo per quella funzione di classe e nient'altro, fornendo un ulteriore livello di sicurezza.