Position actuelle: Accueil> Derniers articles> Description des autorisations système requises lors de l'utilisation de MySqli :: Debug

Description des autorisations système requises lors de l'utilisation de MySqli :: Debug

M66 2025-06-01

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é.

1. Introduction à MySqli :: Debug ()

 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 .

2. Les autorisations du système requises pour utiliser MySqli :: Debug ()

1. Autorisations d'écriture du système de fichiers

  • 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

2. Restrictions sur SELINUX ou Apparmor (le cas échéant)

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.

3. Permissions liées à la configuration PHP

  • 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

3. Choses à noter lors de l'utilisation de mysqli :: debug ()

1. Ne peut être appelé qu'avant la connexion

Appeler MySqli :: Debug () doit être exécuté avant New MySqli () , sinon il sera ignoré.

2. Impact des performances

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.

3. Risque de fuite de journaux

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

4. Gestion de la rotation des journaux

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).

4. Exemple de code: utilisez mysqli :: debug () et assurez-vous que les autorisations sont correctes

 <?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();
?>

5. Résumé

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.