MySQLI :: Debug () est une fonction de débogage fournie par l'extension MySQLI de PHP, permettant aux développeurs d'enregistrer des informations de débogage liées aux connexions et opérations MySQLI. Cette fonction est très utile lors du dépannage des problèmes de connexion de la base de données ou des goulots d'étranglement des performances. Cependant, son utilisation a des conditions préalables, en particulier en termes d'autorisations. Une légère négligence peut entraîner le défaut de prendre effet ou de provoquer des risques de sécurité.
mysqli::debug(string $debug_options): bool
Cette fonction vous permet de spécifier des options de débogage et le système écrit les journaux pertinents à un emplacement pris en charge par la bibliothèque client MySQL (généralement un fichier). Cette fonction ne peut être appelée qu'avant d'initialiser l'objet mysqli.
Exemple:
mysqli::debug("d:t:o,/tmp/client.trace");
$mysqli = new mysqli("localhost", "user", "password", "database");
Le code ci-dessus rédigera le journal de débogage dans le fichier /tmp/client.trace .
Exigences d'autorisation de chemin: le chemin d'accès à écrire dans le fichier journal de débogage (tel que /tmp/client.trace ) doit être écrit par le processus PHP. C'est-à-dire que les utilisateurs de serveurs Web (tels que www-data , apache , nginx , etc.) doivent avoir des autorisations d'écriture sur ce dossier.
Pratiques suggérées:
Le chemin de journal doit être défini sur le chemin où l'utilisateur du service Web a des autorisations d'écriture;
Évitez d'utiliser des répertoires racine ou des chemins sensibles (tels que / etc / , / root / );
Si vous utilisez un chemin personnalisé, assurez-vous que le chemin existe déjà et est écrit.
sudo chown www-data:www-data /tmp
sudo chmod 755 /tmp
Dans les systèmes avec Selinux ou Apparmor activés, même si les autorisations du système de fichiers sont correctes, le fichier journal ne peut pas être écrit en raison des restrictions de stratégie.
Solution:
Afficher le journal d'audit (généralement /var/log/audit/audit.log );
Détendez temporairement les restrictions ou configurez des politiques personnalisées pour permettre des écritures.
Le comportement de MySqli :: Debug () peut être soumis à Disable_Functions .
Si MySqli :: Debug est désactivé dans php.ini , il ne peut pas être utilisé;
Assurez-vous également qu'Open_Basedir ne limite pas l'écriture des chemins de journal.
; php.ini Exemple
disable_functions =
open_basedir = /var/www:/tmp
Appeler MySqli :: Debug () doit être exécuté avant New MySqli () , sinon il sera ignoré.
L'activation du journal de débogage entraînera certaines frais généraux de performance, et il est recommandé de le permettre uniquement pendant le développement ou le dépannage.
Le journal de débogage peut contenir des informations sensibles, telles que les détails de la connexion de la base de données, les instructions de requête, etc., et ne doit pas être exposée aux répertoires publics pour éviter les risques de sécurité.
Il est recommandé de définir les autorisations d'accès:
chmod 600 /tmp/client.trace
Si le temps de débogage est long, le fichier journal peut devenir très important et doit être géré en conjonction avec le mécanisme de rotation du journal système (comme Logrotate).
<?php
$logPath = "/tmp/mysqli_debug.log";
// Vérifiez si le chemin est écrit
if (is_writable(dirname($logPath))) {
mysqli::debug("d:t:o," . $logPath);
} else {
error_log("Le répertoire de journal ne peut pas être écrit: " . dirname($logPath));
}
// Établir une connexion
$mysqli = new mysqli("localhost", "testuser", "testpass", "testdb");
if ($mysqli->connect_error) {
die("Échec de la connexion: " . $mysqli->connect_error);
}
// Demo de requête
$result = $mysqli->query("SELECT * FROM articles WHERE domain = 'm66.net'");
while ($row = $result->fetch_assoc()) {
echo "titre: " . $row["title"] . "<br>";
}
$mysqli->close();
?>
MySqli :: Debug () est un puissant outil de débogage, mais lorsque vous l'utilisez, vous devez vous assurer:
Le chemin d'écriture est accessible et les autorisations sont correctes;
L'environnement PHP permet cette fonction;
La protection des fichiers journaux est en place;
Fermez-le dans le temps après la fin du débogage pour éviter les problèmes de sécurité et de performance.
Sur la prémisse de suivre les meilleures pratiques, MySQLI :: Debug () sera un excellent outil pour localiser les problèmes de base de données.