Recettes
Politique de sécurité du contenu
Si votre site utilise la politique de sécurité du contenu, vous devrez ajouter 'nonce-<value>'
et
'strict-dynamic'
à script-src
pour que Tracy fonctionne correctement. Certains plugins tiers peuvent
nécessiter des directives supplémentaires. Le nonce n'est pas pris en charge par la directive style-src
. Si vous
utilisez cette directive, vous devez ajouter 'unsafe-inline'
, mais cela doit être évité en mode production.
Exemple de configuration pour Nette Framework:
http:
csp:
script-src: [nonce, strict-dynamic]
Exemple en pur PHP :
$nonce = base64_encode(random_bytes(20));
header("Content-Security-Policy: script-src 'nonce-$nonce' 'strict-dynamic';");
Chargement plus rapide
L'intégration de base est simple, mais si vous avez des scripts qui bloquent lentement dans la page Web, ils peuvent ralentir
le chargement de Tracy. La solution consiste à placer <?php Tracy\Debugger::renderLoader() ?>
dans votre
modèle avant tout script :
<!DOCTYPE html>
<html>
<head>
<title>...<title>
<?php Tracy\Debugger::renderLoader() ?>
<link rel="stylesheet" href="assets/style.css">
<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
</head>
AJAX et requêtes redirigées
Tracy peut afficher la barre de débogage et les écrans bleus pour les demandes AJAX et les redirections. Tracy crée ses
propres sessions, stocke les données dans ses propres fichiers temporaires et utilise un cookie tracy-session
.
Tracy peut également être configuré pour utiliser une session PHP native, qui est lancée avant que Tracy ne soit activé :
session_start();
Debugger::setSessionStorage(new Tracy\NativeSession);
Debugger::enable();
Dans le cas où le démarrage d'une session nécessite une initialisation plus complexe, vous pouvez démarrer Tracy
immédiatement (afin qu'il puisse gérer les éventuelles erreurs qui se produisent), puis initialiser le gestionnaire de session
et enfin informer Tracy que la session est prête à être utilisée en utilisant la fonction dispatch()
:
Debugger::setSessionStorage(new Tracy\NativeSession);
Debugger::enable();
// suivi de l'initialisation de la session
// et démarrer la session
session_start();
Debugger::dispatch();
La fonction setSessionStorage()
existe depuis la version 2.9, avant cela Tracy utilisait toujours la session PHP
native.
Épurateur personnalisé
Scrubber est un filtre qui empêche les données sensibles de s'échapper des vidages, comme les mots de passe ou les
informations d'identification. Le filtre est appelé pour chaque élément du tableau ou de l'objet vidés et renvoie
true
si la valeur est sensible. Dans ce cas, *****
est imprimé à la place de la valeur.
// évite de vider les valeurs des clés et les propriétés telles que `password`,
// `password_repeat`, `check_password`, `DATABASE_PASSWORD`, etc.
$scrubber = function(string $key, $value, ?string $class): bool
{
return preg_match('#password#i', $key) && $value !== null;
};
// Nous l'utilisons pour tous les dumps dans BlueScreen.
Tracy\Debugger::getBlueScreen()->scrubber = $scrubber;
Logger personnalisé
Nous pouvons créer un enregistreur personnalisé pour consigner les erreurs, les exceptions non corrigées et être également
appelé par Tracy\Debugger::log()
. Logger implémente l'interface Tracy\ILogger.
use Tracy\ILogger;
class SlackLogger implements ILogger
{
public function log($value, $priority = ILogger::INFO)
{
// envoie une demande à Slack
}
}
Et ensuite nous l'activons :
Tracy\Debugger::setLogger(new SlackLogger);
Si nous utilisons le Nette Framework complet, nous pouvons le définir dans le fichier de configuration de NEON :
services:
tracy.logger: SlackLogger
Intégration Monolog
Le paquet Tracy fournit un adaptateur PSR-3, permettant l'intégration de monolog/monolog.
$monolog = new Monolog\Logger('main-channel');
$monolog->pushHandler(new Monolog\Handler\StreamHandler($logFilePath, Monolog\Logger::DEBUG));
$tracyLogger = new Tracy\Bridges\Psr\PsrToTracyLoggerAdapter($monolog);
Debugger::setLogger($tracyLogger);
Debugger::enable();
Debugger::log('info'); // écrit: [<TIMESTAMP>] canal principal.INFO: info [] []
Debugger::log('warning', Debugger::WARNING); // écrit: [<TIMESTAMP>] canal principal.WARNING: avertissement [] []
nginx
Si Tracy ne fonctionne pas sur nginx, il est probablement mal configuré. S'il y a quelque chose comme
try_files $uri $uri/ /index.php;
changez-le en
try_files $uri $uri/ /index.php$is_args$args;