In der PHP-Entwicklung ist MySQLI :: Debug () eine wenig bekannte, aber sehr nützliche Funktion. Es kann verwendet werden, um die interne Ausführung von MySQLI -Erweiterungen zu debuggen, insbesondere wenn es sich um komplexe Datenbankverbindungen oder Abfrageprobleme handelt.
In diesem Artikel wird erläutert, wie MySQLI :: Debug () in einer Docker- oder Virtual Machine -Umgebung aktiviert und verwendet wird, um die Debugging -Effizienz zu verbessern.
Mysqli :: debug () ist ein Debugging -Tool, das von der PHP MySQLI -Erweiterung bereitgestellt wird. Seine Funktion besteht darin, die Debugging -Informationen von MySQLI in die angegebene Datei auszugeben. Es wird nicht in Standardausgabe oder Browser ausgegeben, sondern schreibt auf Protokolldateien auf dem Server.
Die Anrufmethode ist sehr einfach:
mysqli::debug("d:t:o,/tmp/client.trace");
Die Bedeutung des Parameters "d: t: o,/tmp/client.trace" lautet:
D : Debugginformationen;
T : Threadinformationen;
O : Ausgabe zur Datei;
/tmp/client.trace : Ausgabedateipfad.
Hinweis: Die Debugging -Unterstützung für die MySQL -Client -Bibliothek muss vor der Verwendung dieser Funktion aktiviert sein, da ansonsten dieser Funktionsaufruf ungültig ist.
Bei Verwendung dieser Funktion in einem Docker -Container oder einer virtuellen Maschine müssen zwei Voraussetzungen aufmerksam werden:
PHP muss im CLI- oder FPM -Modus ausgeführt werden und den MySQLND -Treiber aktivieren.
PHP in einem Container oder einer virtuellen Maschine muss mit Debug -Unterstützung zusammengestellt werden.
Führen Sie den folgenden Befehl aus, um zu überprüfen, ob PHP MySQLI -Debugging unterstützt:
php -i | grep 'Client API version'
Wenn das Ergebnis MySQLND enthält, bedeutet dies Unterstützung. Andernfalls müssen Sie möglicherweise ein PHP -Bild mit MySQLND neu kompilieren oder installieren.
Wenn Sie Docker verwenden, können Sie es in der Dockerfile wie folgt konfigurieren:
FROM php:8.2-cli
RUN docker-php-ext-install mysqli \
&& echo "mysqli.allow_local_infile=On" >> /usr/local/etc/php/php.ini
# Optional:Debug -Dateipfad montieren
VOLUME /tmp
Schreiben Sie dann den folgenden Code -Test in PHP:
<?php
mysqli::debug("d:t:o,/tmp/client.trace");
$mysqli = new mysqli("db.m66.net", "root", "password", "test");
if ($mysqli->connect_errno) {
echo "Verbindung ist fehlgeschlagen: " . $mysqli->connect_error;
exit();
}
$result = $mysqli->query("SELECT * FROM users");
while ($row = $result->fetch_assoc()) {
print_r($row);
}
$mysqli->close();
Nach dem Ausführen dieses Skripts können Sie Debugging -Informationen in der Datei /tmp/client.trace anzeigen.
Die Verwendung in einer virtuellen Maschine unterscheidet sich nicht von der Verwendung von nativem oder Docker. Das einzige, was zu beachten ist, ist, dass der PHP -Prozess die Erlaubnis haben muss, in den Pfad der von Ihnen festgelegten Protokolldatei wie /TMP oder das von Ihnen angegebene Mount -Verzeichnis zu schreiben.
Der Debug -Protokollinhalt ist grob wie folgt (Auszug):
>mysql_real_connect
>mysql_send_query
<mysql_read_query_result
...
Durch diese Protokolle können Sie die Gründe für den Verbindungsfehler, die Ausführung langsamer Abfragen und sogar Verzögerungen finden, die durch DNS -Konfigurationsfehler verursacht werden.
In Produktionsumgebungen sollten Sie es vermeiden , MySQLI :: Debug () zu aktivieren, da sie sensible Daten wie Datenbankverbindungsinformationen und Abfrageninhalte durchlaufen. Es wird nur in Entwicklungs- oder Testumgebungen empfohlen und achten Sie darauf, generierte Protokolldateien zu beseitigen.
Die Verwendung von MySQLI :: Debug () in Docker oder Virtual Machine -Umgebung ist nicht kompliziert, der Schlüssel ist:
Stellen Sie sicher, dass PHP MySQLND verwendet.
Stellen Sie die Berechtigungen für Protokollwege im Container oder in der virtuellen Maschine fest.
Deaktivieren oder löschen Sie die Protokolle rechtzeitig nach Abschluss des Debuggens.
Durch die vernünftige Verwendung dieses Tools kann es effizienter und genauer sein, wenn Datenbankprobleme Fehler beheben.
Wenn Sie ähnliche Debugging -Anforderungen haben, können Sie es auch versuchen!