Mysql
 sql >> Datenbank >  >> RDS >> Mysql

lavaral 5 ERROR{ (SQLSTATE[HY000] [1045] Zugriff verweigert für Benutzer 'root'@'localhost' (mit Passwort:YES)}

Standardmäßig geht Laravel davon aus, dass Sie unterschiedliche Konfigurationen für unterschiedliche Umgebungen haben möchten. Z.B. In einer Testumgebung möchten Sie vielleicht einen anderen Benutzernamen und ein anderes Passwort haben und in einer Produktionsumgebung anders. Da Laravel so viele Konfigurationsdateien hat, wird es schnell zu einem Albtraum, all diese zu verwalten. Daher verwendet Laravel die Umgebungsvariablen von PHP.

Siehe die Dokumentation hier.

Was im Grunde besagt, dass Sie, wenn Sie die "Umgebungs" -Variablen verwenden möchten, die Laravel standardmäßig verwendet, alle Ihre Konfigurationen in env() platzieren müssen Methode wie bereits erwähnt.

Wenn Sie dies nicht wünschen, z.B. Entfernen Sie für einfache Projekte einfach die env aus Ihrem Code, wie hier gezeigt.

'mysql' => [
        'driver'    => 'mysql',
        'host'      => 'localhost',
        'database'  => 'laravel',
        'username'  => 'root',
        'password'  => 'password',
        'charset'   => 'utf8',
        'collation' => 'utf8_unicode_ci',
        'prefix'    => '',
        'strict'    => false,
    ],

Beachten Sie, dass Sie mischen und anpassen können. d.h. Sie können einige der Variablen in env und einige eigenständig haben.

Warum also env verwenden? überhaupt?

Nehmen wir an, Ihre Anwendung hat 100 Tester, die alle an verschiedenen Orten platziert sind. In Laravel müssen Sie ungefähr 8-10 Konfigurationsdateien codieren. Außerdem müssen Sie version-control diese Dateien. Sie haben also zwei Probleme zur Hand:

  1. Sie möchten nicht allen 100 Benutzern die gleichen Anmeldeinformationen senden. Außerdem können sie unterschiedliche Datenbanken, Cache-Server usw. verwenden, was bedeutet, dass sie unterschiedliche Konfigurationen haben. Also muss jeder Benutzer diese 8-10 Konfigurationsdateien von Hand pflegen.
  2. Sie möchten diese Konfigurationsdateien nicht an die Versionskontrolle senden. Denn wenn Sie dies tun, wird die ganze Welt Ihre API-Geheimnisse kennen und möglicherweise davon profitieren (genau wie das Passwort). Auch wenn Sie sich Laravel-Konf-Dateien ansehen, werden Sie feststellen, dass es andere Informationen wie Zeitzone, Debug-Eigenschaft usw. gibt, die sich auch in Konf-Dateien befinden, und Sie möchten diese versionieren. Wie kontrollieren Sie also die Version solcher Konfigurationsdateien und verbergen dennoch Ihre vertraulichen Informationen?

Die Antwort ist env Variablen. Laravel verwendet dotenv dessen Dokumentation finden Sie hier . Grundsätzlich sind dies Variablen, die in einer Datei namens .env leben in einem Schlüssel-Wert-Paar. Z. B.

Beispielinhalt der .env-Datei

APP_DEBUG=false
APP_KEY=ABCDEFGH
...

Sobald Sie Ihre .env-Datei so definiert haben, können Sie den Wert mit dem Schlüssel als solchem ​​abrufen env('APP_DEBUG') .

Das löst also das oben genannte Problem auf folgende Weise:

  1. Sie behalten die .env Datei für sich. Außerdem deklarieren Sie eine weitere Datei namens .env.example Dies ist eine exakte Kopie der Originaldatei, mit der Ausnahme, dass sie Beispielwerte enthält, nicht Ihre sensiblen Werte. Dann geben Sie diese neue Beispieldatei an alle weiter. Sie werden die Beispieldaten durch ihre eigenen sensiblen Informationen ersetzen.
  2. Da Sie die Version der Beispieldatei kontrollieren, können Sie die Version aller Ihrer conf-Dateien kontrollieren, da sie das Geheimnis nicht enthalten. Das Geheimnis liegt in .env-Dateien. Alle diese conf-Dateien enthalten Werte wie diesen env('APP_KEY') und der tatsächliche Wert wird zur Laufzeit durch Ihre .env-Datei ersetzt.