sql >> Databasteknik >  >> RDS >> Mysql

Hur skapar man en global konfigurationsfil?

Alla har sina egna preferenser. Jag föredrar att lagra mina DB-inställningar i en .ini utanför webroot och sedan ge den ett 0600 chmod-värde, för att förhindra att någon annan än ägaren läser det.

Ett exempel på .ini kommer att se ut så här:

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

Då kan du använda php-funktionen parse_ini_file sedan i din konstruktor läser du bara in det och analyserar det till en 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']);
}

Och viola, du har ett enkelt och säkert sätt att ställa in din databasanslutning. Den här klassen togs från en PDO-förlängningsklass, så om du inte använder PDO måste du ändra den raden, men som du kan se får du användarnamnet etc i en $settings array.

Jag skulle MYCKET undvika att lagra någon typ av databasinformation i en CONSTANT eller GLOBAL typ variabel. På detta sätt, $settings är endast tillgänglig för den klassfunktionen och inget annat, vilket ger ett extra säkerhetslager.



  1. returnera mySQL ursprungliga radnummer

  2. Hur man skapar ett alias för en databas i SQL Server

  3. Vilka är skillnaderna mellan utf8_general_ci och utf8_unicode_ci?

  4. Schemalagd körning av lagrad procedur på SQL-server