web-dev-qa-db-fra.com

Comment puis-je écrire sur la console en PHP?

Est-il possible d'écrire une chaîne ou de se connecter à la console?

Ce que je veux dire

Comme dans jsp, si nous imprimons quelque chose comme system.out.println("some"), ce sera là sur console et non sur page.

250
Labeeb Panampullan

Firefox

Sur Firefox, vous pouvez utiliser une extension appelée FirePHP qui permet la journalisation et la sauvegarde des informations de vos applications PHP vers la console. Ceci est une extension de l’extension de développement Web impressionnante Firebug .

Chrome

Toutefois, si vous utilisez Chrome, il existe un outil de débogage PHP appelé Chrome Logger ou webug (webug a des problèmes d’ordre des journaux).

Plus récemment, Clockwork est en développement actif, ce qui étend les outils de développement en ajoutant un nouveau panneau pour fournir des informations utiles de débogage et de profilage. Il fournit un support prêt à l'emploi pour Laravel 4 et Slim 2 et un support peut être ajouté via son API extensible. 

Utiliser Xdebug

Un meilleur moyen de déboguer votre PHP serait via Xdebug . La plupart des navigateurs fournissent des extensions d'assistance pour vous aider à transmettre le cookie/chaîne de requête requis pour initialiser le processus de débogage. 

125
Malachi

Ou vous utilisez l'astuce de ce site Web PHP Debug to console

Vous avez d’abord besoin d’une petite fonction d’aide PHP

function debug_to_console( $data ) {
    $output = $data;
    if ( is_array( $output ) )
        $output = implode( ',', $output);

    echo "<script>console.log( 'Debug Objects: " . $output . "' );</script>";
}

Ensuite, vous pouvez l'utiliser comme ça

debug_to_console( "Test" );

Cela créera une sortie comme celle-ci:

Debug Objects: Test
307
Senador

Si vous recherchez une approche simple, reprenez le nom JSON:

<script>
    console.log(<?= json_encode($foo); ?>);
</script>
57
Travis

Par défaut, toute la sortie passe à stdout, qui correspond à la réponse HTTP ou à la console, selon que votre script est exécuté par Apache ou manuellement sur la ligne de commande. Mais vous pouvez utiliser error_log pour la consignation et divers flux d'E/S peuvent être écrits avec fwrite .

32
nikc.org

Essayez ceci cela fonctionne: 

echo("<script>console.log('PHP: ".$data."');</script>");
31
Mandy
echo 
"<div display='none'>
    <script type='text/javascript'>
        console.log('console log message');
    </script>
</div>";

Crée un

<div>

avec le 

display="none"

de sorte que le div ne soit pas affiché, mais le 

console.log()

la fonction est créée en javascript. Donc, vous obtenez le message dans la console.

15
Neo

Quelques bonnes réponses qui ajoutent plus de profondeur; mais il me fallait quelque chose de plus simple et qui ressemblait davantage à la commande JS console.log().

J'utilise PHP dans beaucoup de "collecte de données et transforme en xml" dans l'application AJAX. JS console.log ne fonctionne pas dans ce cas; il casse la sortie XML. (Peut-être que quelqu'un a une solution pour cela?)

Xdebug etc. avait des problèmes similaires.

Ma solution sous Windows:

  • Configurez un fichier .txt assez facile à lire et à écrire
  • Définissez la variable PHP error_log dans le fichier .ini pour écrire dans ce fichier.
  • Ouvrez le fichier dans l'explorateur de fichiers Windows et ouvrez un volet de visualisation pour celui-ci.
  • Utilisez la commande error_log('myTest'); PHP pour envoyer des messages.

Cette solution est simple, répond à mes besoins la plupart du temps, en PHP standard, et le volet de visualisation se met à jour automatiquement chaque fois que PHP y écrit.

14
Klompenrunner

En tant qu'auteur de la page Web liée dans le réponse populaire ci-dessus, j'aimerais ajouter ma dernière version de cette fonction d'assistance simple, beaucoup plus solide.

J'utilise json_encode() pour vérifier si le type var n'est pas nécessaire et ajoute également un tampon pour résoudre les problèmes de frameworks, il n'y a pas de retour solide ou d'utilisation excessive de header() 

/**
 * Simple helper to debug to the console
 *
 * @param $data object, array, string $data
 * @param $context string  Optional a description.
 *
 * @return string
 */
function debug_to_console( $data, $context = 'Debug in Console' ) {

    // Buffering to solve problems frameworks, like header() in this and not a solid return.
    ob_start();

    $output  = 'console.info( \'' . $context . ':\' );';
    $output .= 'console.log(' . json_encode( $data ) . ');';
    $output  = sprintf( '<script>%s</script>', $output );

    echo $output;
}

Usage

// $data is the example var, object; here an array.
$data = [ 'foo' => 'bar' ];
debug_to_console( $data );`

Capture d'écran du résultat

Également un exemple simple sous forme d'image à comprendre beaucoup plus facilement.

 enter image description here

14
bueltge

Je pense qu'il peut être utilisé -

function jsLogs($data) {
    $html = "";
    $coll;

    if (is_array($data) || is_object($data)) {
        $coll = json_encode($data);
    } else {
        $coll = $data;
    }

    $html = "<script>console.log('PHP: ".$coll."');</script>";

    echo($html);
    # exit();
}

# For Array
jsLogs(array("test1", "test2")); # PHP: ["test1","test2"]

# For Object
jsLogs(array("test1"=>array("subtest1", "subtest2"))); #PHP: {"test1":["subtest1","subtest2"]}

# For String
jsLogs("testing string"); #PHP: testing string
12
Pankaj Bisht

Je trouve cela utile:

function console($data, $priority, $debug)
{
    if ($priority <= $debug)
    {
        if (is_array($data))
            $output = '<script>console.log("' . str_repeat(" ", $priority-1) . implode( ",", $data) . '");</script>';
        else
            $output = '<script>console.log("' . str_repeat(" ", $priority-1) . $data . '");</script>';

        echo $output;
    }
}

Et utilisez-le comme:

<?php
$debug = 5; // All lower and equal priority logs will be displayed
console('Important' ,1 , $debug);
console('Less Important' ,2 , $debug);
console('Even Less Important' ,5 , $debug);
console('Again Important' ,1 , $debug);
?>

Quelles sorties dans la console:

Important
 Less Important
     Even Less Important
Again Important

Et vous pouvez désactiver les journaux moins importants en les limitant à l'aide de la valeur $ debug

11
zee
function phpconsole($label='var',$x){
 ?>
 <script type="text/javascript">
    console.log('<?php echo ($label)?>');
    console.log('<?php echo json_encode($x)?>');
    </script>
 <?php
}
7
ashraf mohammed

Court et facile, pour les tableaux, les chaînes ou aussi les objets.

function console_log( $data ) {
  $output  = "<script>console.log( 'PHP debugger: ";
  $output .= json_encode(print_r($data, true));
  $output .= "' );</script>";
  echo $output;
}
7
Carlos Lugo
$variable = "Variable";
echo "<script>console.log('$variable');</script>";

Interaction PHP et Javascript.

6
0DAYanc

Il existe également une excellente extension Google Chrome PHP Console avec bibliothèque php qui permet de:

  • Voir les erreurs et les exceptions dans la console JavaScript Chrome et dans les popups de notification.
  • Vide n'importe quelle variable de type.
  • Exécutez le code PHP à distance.
  • Protéger l'accès par mot de passe.
  • La console de groupe se connecte par demande.
  • Aller au fichier d'erreur: ligne dans votre éditeur de texte.
  • Copier les données d'erreur/de débogage dans le presse-papiers (pour les testeurs).
5
barbushin

Pour Chrome, il existe une extension appelée Chrome Logger permettant de consigner des messages PHP.

Les devTools de Firefox ont même prise en charge intégrée du protocole Chrome Logger }.

Pour activer la journalisation, il vous suffit de sauvegarder le fichier 'ChromePhp.php' } dans votre projet. Ensuite, il peut être utilisé comme ceci:

include 'ChromePhp.php';
ChromePhp::log('Hello console!');
ChromePhp::log($_SERVER);
ChromePhp::warn('something went wrong!');

Exemple tiré de la page GitHub .

La sortie peut alors ressembler à ceci:

Server log within Firefox DevTools

5
Sebastian Zartner

J'ai abandonné tout ce qui précède au profit de http://phptoolcase.com/guides/ptc-debug-guide.html Je ne peux que le féliciter assez!

Cliquez simplement sur l'un des onglets en haut à droite, ou sur le "cliquez ici" pour développer/masquer.

Remarquez les différentes "catégories". Vous pouvez cliquer sur n'importe quel tableau pour le développer/le coller.

De la page web

"Caractéristiques principales:

Show globals vars ($GLOBALS, $_POST, $_GET, $_COOKIE ...)
Show php version and loaded extensions
Replace php built in error handler
Log sql queries
Monitor code and sql queries execution time
Inspect variables for changes
Function calls tracing
Code coverage analysis to check which lines of script where executed
Dump of all types of variable
File inspector with code highlighter to view source code
Send messages to js console(Chrome only), for ajax scripts

"enter image description here

3
Mawg

Grand post merci, je cherchais un moyen de déboguer du code dans un plugin Wordpress que je développais et que je rencontrais dans ce post.

J'ai pris les éléments de code les plus pertinents pour moi parmi les réponses ci-dessus et les ai combinés dans une fonction que je peux utiliser pour le débogage de Wordpress. La fonction est:

function debug_log( $object=null, $label=null, $priority=1 ){
    $priority = $priority<1? 1: $priority;
    $message = json_encode($object, JSON_PRETTY_PRINT);
    $label = "Debug" . ($label ? " ($label): " : ': ');
    echo "<script>console.log('".str_repeat("-", $priority-1).$label."', ".$message.");</script>";
}

L'utilisation est la suivante:

$txt = 'This is a test string';
$sample_array = array('cat', 'dog', 'pig', 'ant', 'fly');
debug_log( $txt,'',7 );
debug_log( $sample_array );

J'espère que quelqu'un d'autre trouvera cette fonction utile.

Si cette fonction est utilisée avec le développement Wordpress, elle doit être placée dans le fichier functions.php du thème enfant et peut ensuite être appelée n'importe où dans le code.

3
Clinton

Pour les appels Ajax ou les réponses xml/json, où vous ne voulez pas manipuler le corps, vous devez envoyer les journaux via des en-têtes http, puis les ajouter à la console avec une extension Web. C’est ainsi que FirePHP et QuantumPHP (un fork de ChromePHP) le font dans Firefox.

Si vous avez de la patience, x-debug est une meilleure option. Vous obtenez une meilleure compréhension de PHP, avec la possibilité de mettre votre script en pause, de voir ce qui se passe, puis de reprendre le script.

2
Frank Forte

Depuis 2017, Firebug et donc Firephp ont été désactivés.

J'ai écrit quelques petites modifications à l'outil chromephp pour permettre la migration transparente de firephp vers firebug pour le débogage via la console.

Cet article explique en étapes claires et faciles

https://medium.com/@kudehinbuoluwaponle/migrate-from-firephp-to-chromephp-in-5-minutes-without-breaking-existing-e4afd1b28c5c

2

N'importe lequel de ces deux travaillent:

<?php
    $five = 5;
    $six = 6;
?>
<script>
    console.log(<?php echo $five + $six ?>);
</script>


<?php
    $five = 5;
    $six = 6;
    echo("<script>console.log($five + $six);</script>");
?>
1
roybraym
function console_log( $data ) {
    $bt = debug_backtrace();
    $caller = array_shift($bt);

    if ( is_array( $data ) )
        error_log( end(split('/',$caller['file'])) . ':' . $caller['line'] . ' => ' . implode( ',', $data) );
    else
        error_log( end(split('/',$caller['file'])) . ':' . $caller['line'] . ' => ' . $data );

}
0
btm1

Voici une fonction pratique. Il est très simple à utiliser, vous permet de transmettre autant d’arguments que vous le souhaitez, quel que soit leur type, et affiche le contenu de l’objet dans la fenêtre de la console du navigateur comme si vous appeliez console.log depuis JavaScript - mais depuis PHP.

Notez que vous pouvez également utiliser des balises en passant "TAG-YourTag". Elles seront appliquées jusqu'à la lecture d'une autre balise, par exemple "TAG-YourNextTag".

/*
*   Brief:          Print to console.log() from PHP
*   Description:    Print as many strings,arrays, objects, and other data types to console.log from PHP.
*                   To use, just call consoleLog($data1, $data2, ... $dataN) and each dataI will be sent to console.log - note that
*                   you can pass as many data as you want an this will still work.
*
*                   This is very powerful as it shows the entire contents of objects and arrays that can be read inside of the browser console log.
*                   
*                   A tag can be set by passing a string that has the prefix TAG- as one of the arguments. Everytime a string with the TAG- prefix is
*                   detected, the tag is updated. This allows you to pass a tag that is applied to all data until it reaches another tag, which can then
*                   be applied to all data after it.
*
*                   Example:
*                   consoleLog('TAG-FirstTag',$data,$data2,'TAG-SecTag,$data3); 
*                   Result:
*                       FirstTag '...data...'
*                       FirstTag '...data2...'
*                       SecTag   '...data3...' 
*/
function consoleLog(){
    if(func_num_args() == 0){
        return;
    }

    $tag = '';
    for ($i = 0; $i < func_num_args(); $i++) {
        $arg = func_get_arg($i);
        if(!empty($arg)){       
            if(is_string($arg)&& strtolower(substr($arg,0,4)) === 'tag-'){
                $tag = substr($arg,4);
            }else{      
                $arg = json_encode($arg, JSON_HEX_TAG | JSON_HEX_AMP );
                echo "<script>console.log('".$tag." ".$arg."');</script>";
            }       
        }
    }
}

NOTE: func_num_args () et func_num_args () sont des fonctions php permettant de lire un nombre dynamique d'arguments en entrée, et permettent à cette fonction d'avoir une infinité de demandes console.log à partir d'un appel de fonction

0
Chris Sprague