dotenv erfordert .env-Datei, die auf die Produktion

Ich bin mit dotenv für PHP zu verwalten, die Umwelt-Einstellungen (nicht lavarel aber ich habe es markiert, weil lavarel auch verwendet dotenv)

Habe ich ausgeschlossen .env von der code-Basis und ich habe die .env.Beispiel für alle anderen Mitarbeiter

Auf der github-Seite von dotenv:

phpdotenv ist für die Entwicklungs-Umgebungen und sollten in der Regel nicht in der Produktion eingesetzt werden. In der Produktion werden die aktuellen Umgebungsvariablen sollten gesetzt werden, so dass kein overhead für das laden der .env-Datei für jede Anforderung. Erreicht werden kann dies über einen automatisierten deployment-Prozess mit tools wie Vagrant, chef oder Puppet, oder kann manuell eingestellt werden, mit der cloud-hosts wie Pagodabox und Heroku.

Die Sache, die ich nicht verstehe, ist, dass ich erhalten die folgende Ausnahme:

PHP Fatal error: Uncaught exception 'InvalidArgumentException' with message 'Dotenv: Environment file .env not found or not readable.

Dies steht im Widerspruch mit dem, was die Dokumentation sagt, dass "die tatsächliche Umgebungsvariablen sollten gesetzt werden, so dass kein overhead für das laden der .env-Datei, die auf jede Anforderung."

Die Frage ist also, ob es irgendein Grund, warum dotenv wirft die exception und/oder bin ich etwas fehlt? Zunächst das Verhalten ist anders im Vergleich zu anderen dotenv Bibliotheken (ruby)

Kann ich leicht umgehen, die nicht so schöne Lösung:

if(getenv('APPLICATION_ENV') !== 'production') { /* or staging */
    $dotenv = new Dotenv\Dotenv(__DIR__);
    $dotenv->load();
}

Schönste Lösung ist meiner Meinung nach, aber ich denke, dotenv sollten damit umgehen.

$dotenv = new Dotenv\Dotenv(__DIR__);
//Check if file exists the same way as dotenv does it
//See classes DotEnv\DotEnv and DotEnv\Loader
//$filePath = $dotenv->getFilePath(__DIR__); 
//This method is protected so extract code from method (see below)

$filePath = rtrim(__DIR__, DIRECTORY_SEPARATOR).DIRECTORY_SEPARATOR . '.env';
//both calls are cached so (almost) no performance loss
if(is_file($filePath) && is_readable($filePath)) {
    $dotenv->load();
}
Schreibe einen Kommentar