Ich verwende dotenv für PHP die Umgebungseinstellungen zu verwalten (nicht lavarel aber ich es markiert, weil lavarel auch verwendet dotenv)dotenv erfordert .env Datei auf die Produktion
Ich habe die .env von der Code-Basis ausgeschlossen und ich habe die .env.example für alle anderen Mitarbeiter hinzugefügt
auf der github Seite von dotenv:
phpdotenv für Entwicklungsumgebungen durchgeführt wird, und in der Regel nicht in der Produktion verwendet werden. In der Produktion sollten die tatsächlichen Umgebungsvariablen so festgelegt werden, dass beim Laden der .env-Datei bei jeder Anforderung kein Aufwand entsteht. Dies kann durch einen automatisierten Bereitstellungsprozess mit Tools wie Vagrant, Chef oder Puppet erreicht werden oder manuell mit Cloud-Hosts wie Pagodabox und Heroku eingestellt werden.
Die Sache, die ich nicht verstehe, ist, dass ich die folgende Ausnahme erhalten:
PHP Fatal error: Uncaught exception 'InvalidArgumentException' with message 'Dotenv: Environment file .env not found or not readable.
Dies steht im Widerspruch mit dem, was Dokumentation sagt „die tatsächlichen Umgebungsvariablen gesetzt werden sollten, so dass es keine Overhead des Ladens der .env-Datei bei jeder Anfrage. "
Also die Frage ist, wenn es einen Grund gibt, warum Dotenv diese Ausnahme wirft und/oder fehle ich etwas? Zunächst wird das Verhalten unterscheidet sich im Vergleich zu anderen dotenv Bibliotheken (Rubin)
ich einfach dieses Problem umgehen können, die nicht so schön Lösung:
if(getenv('APPLICATION_ENV') !== 'production') { /* or staging */
$dotenv = new Dotenv\Dotenv(__DIR__);
$dotenv->load();
}
Netteste Lösung meiner Meinung nach, aber ich denke, dotenv sollte geh damit um.
$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();
}
Aaah Ich kann '$ dotenv-> required()' es funktioniert jede Art und Weise, die nett ist. Die 'getenv ('APP_ENV');' ist sicherer, denke ich? Ich denke, ich gehe für den Filecheck, der für das aktuelle Projekt in Ordnung sein wird. Vielen Dank! –
@SanderVisser was meintest du damit, dass 'getenv ('APP_ENV')' sicherer ist? – Alik
Es verhindert das Laden der .env-Datei in einer Produktionsumgebung, auch wenn sie vorhanden ist. –