Blog geekesque... ou presque

Aller au contenu | Aller au menu | Aller à la recherche

Log coloré avec PHP en console (PHP-CLI)

Il arrive que l'on fasse des scripts PHP qui doivent fonctionner en console, mais l'affichage est terne (blanc sur fond noir) et ne permet pas de mettre en valeur les messages importants.

J'ai donc créé une fonction log qui permet de coloriser le texte affiché sur une console linux. Elle fonctionne aussi avec MobaXterm, je ne l'ai pas testée avec cygwin.

La fonction

/*
 * Display a colored message, based on level
 * @var string $message The message to display
 * @var string $level The level (none, success, info, warning, error)
 * @var array $disp An array of informations to display
 * @void
 */
function log($message, $level='', $disp=array('class'=>true, 'function'=>true, 'file'=>true, 'line'=>true)) {
    $c = array(
        'r' => "\033[31m",
        'g' => "\033[32m",
        'b' => "\033[34m",
        'y' => "\033[33m",
        'n' => "\033[0m"
    );
    $bt = debug_backtrace();
    $caller = array_shift($bt);
    $precaller = array();
    if (count($bt)>0) {
        $precaller = array_shift($bt);
    }
    $prefixes = array();
    if ($disp['class'] === true && array_key_exists('class', $precaller)) { $prefixes[] = $precaller['class']; }
    if ($disp['function'] === true && array_key_exists('function', $precaller)) { $prefixes[] = $precaller['function']; }
    if ($disp['file'] === true && array_key_exists('file', $precaller)) {
        $prefixes[] = $precaller['file'];
    } elseif ($disp['file'] === true) {
        $prefixes[] = $caller['file'];
    }
    if ($disp['line'] === true) { $prefixes[] = $caller['line']; }
    $prefix = implode('::', $prefixes).'::';
    switch($level) {
        case 'success': echo $c['g'], $prefix, ' ', $message, $c['n'], PHP_EOL; break;
        case 'info': echo $c['b'], $prefix, ' ', $message, $c['n'], PHP_EOL; break;
        case 'warning': echo $c['y'], $prefix, ' ', $message, $c['n'], PHP_EOL; break;
        case 'error': echo $c['r'], $prefix, ' ', $message, $c['n'], PHP_EOL; break;
        default: echo $prefix, ' ', $message, PHP_EOL; break;
    }
}

Explications

Les couleurs

On crée un tableau contenant les différents codes couleurs ANSI a appliquer. Je ferai bientôt une petite explication sur ces codes. Notez bien que les codes doivent être entre guillemets et pas entre apostrophes, sans quoi ils ne seront pas interprétés.

La couleur n (normal) est en fait le retour à la normale, une suppression du code précédemment appliqué.

backtrace

La fonction PHP debug_backtrace permet d'obtenir dans un tableau toute la chaîne ayant permis d'arriver à l'exécution de la ligne courante, dans l'ordre anté-chronologique.

La première entrée du tableau contient une information très importante pour nous: le numéro de la ligne ayant appelé la fonction courante. La deuxième entrée du tableau, si elle existe, contient les informations sur le fichier, la classe et la fonction ayant appelés la fonction courante. S'il n'y a qu'une entrée dans le tableau, cela signifie que l'appel a été fait hors de toute fonction.

Commentaires

1. Le vendredi 18 août 2017, 13:02 par コロリー 口コミ

すごく完全に脱毛したい!って思いませんか?同感できません?爆
以前から脚から足首にかけてに不要な毛がむちゃくちゃ生えているので、あなたと同じでやっぱり完全に脱毛したいんです。

そこで永久脱毛するために目が悪くなるまでネットで調べました。そもそも、一般的な脱毛商品は脱毛といいつつただの除毛だからまた生えてきちゃうんですよね。
もっと気楽に永久脱毛する方法はないかな〜?と、脱毛スプレーっていうアイテムを購入してみたけど、広告みたいな効果なかったし・・。詐欺だよね。笑

脱毛エステも金額が張る割に一生ムダ毛とおさらばってことじゃないから意味ないよね・・。
その後もたくさん本買ってみたりもしてわかったのは、やっぱり一生ムダ毛とおさらばするには脱毛サロンに通うしかないみたい。

で、優秀な脱毛サロンの中でも皆が選んでいるのが、このコロリーってところらしいですね。違うサロンよりも値段が安いとのこと!!やっぱり値段は安いに越したことはないよね。
安いだけじゃなくてそれでいて名医揃いで腕前は確かコロリーで永久脱毛しましょう!

コロリーマニアを目指すなら、ここにいろんな情報が載ってますよ。
ここから情報を得て脱毛サロンに行くことを決めたので。
私と一緒に完全に脱毛になりましょう!

2. Le dimanche 24 septembre 2017, 06:14 par division

Greetіngs! Quiϲk question that's completely off topic.
Do you know how to make your ѕite mobіⅼe friendly?
My weblog looks weird when browsing from
my apple ipһone. I'm trying to find a template or plugin that might be able to fix this problem.
If ʏou have any suggestions, please share. Appгeciate it!

Ajouter un commentaire

Le code HTML est affiché comme du texte et les adresses web sont automatiquement transformées.

La discussion continue ailleurs

URL de rétrolien : https://www.g33k-zone.org/index.php?trackback/107

Fil des commentaires de ce billet