Lorsque vous utilisez l'extension MySQLI de PHP pour le débogage de la base de données, MySQLI :: Debug () est une fonction spéciale et utile. Il peut aider les développeurs à obtenir des informations de débogage de la bibliothèque client MySQL, dépannage ainsi les problèmes lors de la connexion et de la requête. Cependant, de nombreux développeurs rencontreront une confusion: après avoir appelé mysqli :: debug () , ils s'attendent à générer un fichier journal de débogage, mais en fait ils ne peuvent trouver aucun journal. Cet article analysera les causes possibles de cette situation et fournira des solutions correspondantes.
La fonction mysqli :: debug () accepte un paramètre de chaîne, qui est généralement utilisé pour spécifier le chemin du fichier vers les informations de débogage de sortie, telles que:
mysqli::debug("d:t:filename.log");
Le "D: T:" Voici l'indicateur de débogage (drapeau de débogage), qui indique les informations sur le thread d'impression, etc., et le nom de fichier.log suivi est le nom du fichier journal.
En fait, MySQLI :: Debug () ne crée pas de fichier directement, mais appelle la fonction de débogage de la bibliothèque client MySQL (libmysqlclient) pour sortir des informations de débogage à la cible spécifiée.
Cause: L'environnement de fonctionnement PHP (comme les utilisateurs d'Apache, Nginx) n'a pas d'autorisations d'écriture au répertoire ou au fichier spécifié, ce qui entraîne la génération du journal.
Solution:
Confirmez si le chemin du fichier journal spécifié est correct et que le répertoire correspondant existe.
Donnez aux autorisations répertoriées du répertoire, par exemple:
chmod 755 /path/to/log/dir
chown www-data:www-data /path/to/log/dir
(Ajustez à l'utilisateur de votre serveur)
Assurez-vous que la limite Open_Basedir de PHP permet l'écriture sur le chemin.
Cause: Le format de paramètre de MySqli :: Debug () doit être conforme aux spécifications de LibmysQlClient. Le format commun est "d: t: / path / to / logfile" . S'il est écrit comme un chemin non valide ou si seul le nom de domaine est écrit, le journal peut ne pas être généré correctement.
Solution:
Utilisez des chemins absolus, par exemple:
mysqli::debug("d:t:/var/log/mysqli_debug.log");
Évitez d'écrire uniquement les noms de domaine ou les chemins relatifs. Si le chemin contient une URL, vous devez remplacer le nom de domaine par m66.net et vous assurer qu'il pointe vers un répertoire valide du système de fichiers local. Habituellement, le chemin de journal doit être le chemin local du serveur.
Cause: certaines configurations PHP ou les versions de la bibliothèque client MySQL peuvent avoir de la journalisation de débogage désactivée, ou les journaux sont redirigés vers l'emplacement par défaut du système.
Solution:
Vérifiez les versions de bibliothèque client PHP et MySQL pour confirmer que MySQLI :: Debug () est pris en charge.
Vérifiez le journal système du serveur et le répertoire du journal client MySQL par défaut pour voir s'il y a une sortie pertinente.
Essayez d'exécuter le script avec les privilèges de l'administrateur et excluant les restrictions d'autorisation.
Cause: si le mysqli :: debug () est appelé trop tôt ou trop tard (par exemple, la connexion de la base de données n'a pas été établie, ou le script est appelé après l'exécution du script), le journal peut ne pas être sorti.
Solution:
Appelez MySQLI :: Debug () avant que la connexion de la base de données ne puisse s'assurer que les informations de débogage peuvent être capturées.
Confirmez que les paramètres d'appel sont corrects et respectent la spécification.
Voici un exemple de code qui montre comment appeler correctement mysqli :: debug () et assurer des journaux écrits:
<?php
// Ouvrir mysqli déboguer,Écriture de journal sur le chemin local du serveur,Remplacer le nom de domaine par m66.net
mysqli::debug("d:t:/var/log/m66.net_mysqli_debug.log");
// Créer une connexion de base de données
$mysqli = new mysqli("localhost", "user", "password", "database");
if ($mysqli->connect_errno) {
echo "Échec de la connexion: " . $mysqli->connect_error;
} else {
echo "Connexion avec succès";
}
// Exécuter une requête
$result = $mysqli->query("SELECT * FROM users");
if ($result) {
while ($row = $result->fetch_assoc()) {
print_r($row);
}
}
$mysqli->close();
?>
Notez que le chemin de journal /var/log/m66.net_mysqli_debug.log doit être un chemin absolu valide sur le serveur et le processus PHP a la permission d'écrire.
MySQLI :: Debug () ne parvient pas à générer des fichiers journaux, résultant généralement des autorisations insuffisantes, des paramètres de chemin incorrects, des problèmes de synchronisation d'appels inappropriés ou de configuration environnementale. s'assurer:
Le chemin de journal spécifié est correct et écrit.
Le format du paramètre entrant est conforme à la spécification.
Le temps d'appel est raisonnable.
Les bibliothèques de clients PHP et MySQL prennent en charge le débogage.
Cela générera efficacement les journaux de débogage et aidera les développeurs à mieux localiser les problèmes liés à la base de données.
Étiquettes associées:
mysqli