MySQLI :: Debug () ist eine Debug -Funktion, die von der MySQLI -Erweiterung von PHP bereitgestellt wird und es Entwicklern ermöglicht, Debug -Informationen zu MySQLI -Verbindungen und -Operationen aufzunehmen. Diese Funktion ist sehr nützlich, wenn Datenbankverbindungsprobleme oder Leistungs Engpässe Fehler beheben. Die Verwendung hat jedoch Voraussetzungen, insbesondere in Bezug auf die Berechtigungen. Eine leichte Nachlässigkeit kann dazu führen, dass sie nicht in Kraft treten oder Sicherheitsrisiken verursachen.
mysqli::debug(string $debug_options): bool
Mit dieser Funktion können Sie Debugging -Optionen angeben, und das System schreibt die entsprechenden Protokolle an einen von der MySQL Client -Bibliothek unterstützten Ort (normalerweise eine Datei). Diese Funktion kann erst vor der Initialisierung des MySQLI -Objekts aufgerufen werden.
Beispiel:
mysqli::debug("d:t:o,/tmp/client.trace");
$mysqli = new mysqli("localhost", "user", "password", "database");
Der obige Code schreibt das Debug -Protokoll in die Datei /tmp/client.trace .
Anforderungen an die Pfadberechtigung: Der Pfad zum Schreiben in die Debug -Protokolldatei (z. B. /tmp/client.trace ) muss durch den PHP -Prozess geschrieben werden. Das heißt, Webservernutzer (z. B. www-data , Apache , Nginx usw.) müssen Schreibberechtigungen in diesen Ordner haben.
Vorgeschlagene Praktiken:
Der Protokollpfad sollte auf den Pfad gesetzt werden, in dem der Webdienst Benutzer Berechtigungen hat.
Vermeiden Sie die Verwendung von Root -Verzeichnissen oder empfindlichen Pfaden (z. B. / etc / , / root / );
Wenn Sie einen benutzerdefinierten Pfad verwenden, stellen Sie sicher, dass der Weg bereits existiert und beschreibbar ist.
sudo chown www-data:www-data /tmp
sudo chmod 755 /tmp
In Systemen mit aktivierter Selinux oder Apparmor können die Protokolldatei auch dann aufgrund von Richtlinienbeschränkungen nicht geschrieben werden.
Lösung:
Sehen Sie sich das Audit -Protokoll an (normalerweise /var/log/audit/audit.log );
Entspannen Sie die Beschränkungen vorübergehend oder konfigurieren Sie benutzerdefinierte Richtlinien, um Schreibvorgänge zu ermöglichen.
Das Verhalten von MySQLI :: Debug () kann disable_functions unterliegen.
Wenn MySQLI :: Debugg in php.ini deaktiviert ist, kann es nicht verwendet werden.
Stellen Sie außerdem sicher, dass Open_Basedir das Schreiben von Protokollpfaden nicht einschränkt.
; php.ini Beispiel
disable_functions =
open_basedir = /var/www:/tmp
MySQLI :: Debug () zu nennen, muss vor neuem MySQLI () ausgeführt werden, sonst wird es ignoriert.
Das Einschalten des Debug -Protokolls führt zu einem bestimmten Leistungsaufwand. Es wird empfohlen, es nur während der Entwicklung oder Fehlerbehebung zu ermöglichen.
Das Debug -Protokoll kann sensible Informationen enthalten, z. B. Datenbankverbindungsdetails, Abfrageberichtungen usw. und sollten nicht öffentlichen Verzeichnissen ausgesetzt sein, um Sicherheitsrisiken zu vermeiden.
Es wird empfohlen, Zugriffsberechtigungen festzulegen:
chmod 600 /tmp/client.trace
Wenn die Debugging -Zeit lang ist, kann die Protokolldatei sehr groß werden und sollte in Verbindung mit dem System -Protokollrotationsmechanismus (wie Lehbrotat) verwaltet werden.
<?php
$logPath = "/tmp/mysqli_debug.log";
// Überprüfen Sie, ob der Pfad beschreibbar ist
if (is_writable(dirname($logPath))) {
mysqli::debug("d:t:o," . $logPath);
} else {
error_log("Protokollverzeichnis kann nicht geschrieben werden: " . dirname($logPath));
}
// Eine Verbindung herstellen
$mysqli = new mysqli("localhost", "testuser", "testpass", "testdb");
if ($mysqli->connect_error) {
die("Verbindung ist fehlgeschlagen: " . $mysqli->connect_error);
}
// Abfrage Demo
$result = $mysqli->query("SELECT * FROM articles WHERE domain = 'm66.net'");
while ($row = $result->fetch_assoc()) {
echo "Titel: " . $row["title"] . "<br>";
}
$mysqli->close();
?>
Mysqli :: debug () ist ein leistungsstarkes Debugging -Tool, aber wenn Sie es verwenden, müssen Sie sicherstellen:
Der Schreibpfad ist zugänglich und die Berechtigungen sind korrekt.
Die PHP -Umgebung ermöglicht diese Funktion;
Protokolldateischutz ist vorhanden;
Schließen Sie es rechtzeitig nach Abschluss des Debuggens, um Sicherheit und Leistungsprobleme zu vermeiden.
MySQLI :: Debug () wird ein großartiges Werkzeug zum Auffinden von Datenbankproblemen sein.