Dans le développement de PHP, MySqli :: Debug () est une fonction peu connue mais très utile. Il peut être utilisé pour déboguer l'exécution interne des extensions MySQLI, en particulier lorsqu'il s'agit de connexions de base de données complexes ou de problèmes de requête.
Cet article expliquera comment activer et utiliser MySqli :: Debug () dans un environnement Docker ou Virtual Machine pour améliorer l'efficacité du débogage.
MySQLI :: Debug () est un outil de débogage fourni par l'extension PHP MySQLI. Sa fonction consiste à sortir les informations de débogage de MySQLI dans le fichier spécifié. Il ne sortit pas sur la sortie ou le navigateur standard, mais écrit pour enregistrer des fichiers sur le serveur.
La méthode d'appel est très simple:
mysqli::debug("d:t:o,/tmp/client.trace");
La signification du paramètre "d: t: o, / tmp / client.trace" est:
D : Débogage des informations;
T : Informations sur le thread;
O : sortie en fichier;
/tmp/client.trace : chemin de fichier de sortie.
Remarque: La prise en charge de débogage de la bibliothèque client MySQL doit être activée avant d'utiliser cette fonction, sinon cet appel de fonction ne sera pas valide.
Lorsque vous utilisez cette fonction dans un conteneur Docker ou une machine virtuelle, deux conditions préalables doivent être prêtées à savoir:
PHP doit s'exécuter en mode CLI ou FPM et activer le pilote mysqlnd ;
PHP dans un conteneur ou une machine virtuelle doit être compilé avec le support de débogage.
Exécutez la commande suivante pour vérifier si PHP prend en charge le débogage de MySQLI:
php -i | grep 'Client API version'
Si le résultat contient mysqlnd , cela signifie le support. Sinon, vous devrez peut-être recompiler PHP ou installer une image PHP contenant MySqlnd .
Si vous utilisez Docker, vous pouvez le configurer dans le dockerfile comme suit:
FROM php:8.2-cli
RUN docker-php-ext-install mysqli \
&& echo "mysqli.allow_local_infile=On" >> /usr/local/etc/php/php.ini
# Facultatif:Chemin de fichier Mount Debug
VOLUME /tmp
Ensuite, rédigez le test de code suivant dans PHP:
<?php
mysqli::debug("d:t:o,/tmp/client.trace");
$mysqli = new mysqli("db.m66.net", "root", "password", "test");
if ($mysqli->connect_errno) {
echo "Échec de la connexion: " . $mysqli->connect_error;
exit();
}
$result = $mysqli->query("SELECT * FROM users");
while ($row = $result->fetch_assoc()) {
print_r($row);
}
$mysqli->close();
Après avoir exécuté ce script, vous pouvez afficher les informations de débogage dans le fichier /tmp/client.trace .
L'utilisation dans une machine virtuelle n'est pas différente de l'utilisation de Native ou Docker. La seule chose à noter est que le processus PHP doit avoir l'autorisation d'écrire sur le chemin du fichier journal que vous définissez, tel que / tmp ou le répertoire de montage que vous spécifiez.
Le contenu du journal de débogage est à peu près le suivant (extrait):
>mysql_real_connect
>mysql_send_query
<mysql_read_query_result
...
Grâce à ces journaux, vous pouvez localiser les raisons de l'échec de la connexion, l'exécution de requêtes lentes, et même trouver des retards causés par les erreurs de configuration DNS.
Dans les environnements de production, vous devez éviter d'activer MySqli :: Debug () car il divulguera des données sensibles telles que les informations de connexion de la base de données et le contenu de requête. Il n'est recommandé que dans les environnements de développement ou de test, et veillez à nettoyer les fichiers journaux générés.
L'utilisation de MySQLI :: Debug () dans Docker ou Virtual Machine Environment n'est pas compliquée, la clé est:
Assurez-vous que PHP utilise MySqlnd ;
Définir les autorisations pour les chemins de journal dans le conteneur ou la machine virtuelle;
Désactiver ou supprimer les journaux à temps après la fin du débogage.
En utilisant cet outil raisonnablement, il peut être plus efficace et précis lors du dépannage des problèmes de base de données.
Si vous avez des exigences de débogage similaires, vous pourriez aussi bien l'essayer!