it-swarm.com.de

Wie schreibe ich in PHP auf die Konsole?

Ist es möglich, eine Zeichenfolge zu schreiben oder sich an der Konsole anzumelden?

Was ich meine

Genau wie in jsp, wenn wir etwas wie system.out.println("some") drucken, wird es auf der Konsole nicht auf der Seite vorhanden sein.

250

Feuerfuchs

In Firefox können Sie eine Erweiterung namens FirePHP verwenden, mit der Informationen von Ihren PHP - Anwendungen in die Konsole geschrieben und ausgegeben werden können. Dies ist ein Addon zur fantastischen Webentwicklungserweiterung Firebug .

Chrom

Wenn Sie jedoch Chrome verwenden, gibt es ein Debugging-Tool PHP namens Chrome Logger oder webug (webug hat Probleme mit der Reihenfolge der Protokolle).

In jüngerer Zeit ist Clockwork in aktiver Entwicklung, was die Developer Tools durch Hinzufügen eines neuen Panels erweitert, um nützliche Debugging- und Profiling-Informationen bereitzustellen. Es bietet Unterstützung für Laravel 4 und Slim 2 und kann über die erweiterbare API hinzugefügt werden. 

Verwenden von Xdebug

Eine bessere Methode zum Debuggen von PHP wäre über Xdebug . Die meisten Browser bieten Hilfsprogrammerweiterungen, mit denen Sie die erforderliche Cookie-/Abfragezeichenfolge übergeben können, um den Debugging-Vorgang zu initialisieren. 

125
Malachi

Oder verwenden Sie den Trick von dieser Website PHP Debug zur Konsole

Zunächst benötigen Sie eine kleine PHP - Helferfunktion

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

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

Dann kannst du es so benutzen

debug_to_console( "Test" );

Dadurch wird eine Ausgabe wie folgt erstellt:

Debug Objects: Test
307
Senador

Wenn Sie nach einem einfachen Ansatz suchen, geben Sie als JSON ein Echo:

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

Standardmäßig wird die gesamte Ausgabe an stdout übergeben. Dies ist die HTTP-Antwort oder die Konsole, je nachdem, ob Ihr Skript von Apache oder manuell in der Befehlszeile ausgeführt wird. Sie können jedoch error_log zum Protokollieren verwenden und verschiedene E/A-Streams können mit fwrite beschrieben werden.

32
nikc.org

Probieren Sie es aus, es funktioniert: 

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

Erzeugt eine

<div>

mit dem 

display="none"

so dass das div nicht angezeigt wird, sondern das 

console.log()

funktion wird in Javascript erstellt. So erhalten Sie die Nachricht in der Konsole.

15
Neo

Einige großartige Antworten, die mehr Tiefe hinzufügen; aber ich brauchte etwas Einfacheres und eher den Befehl JS console.log().

Ich verwende PHP in einer Menge von "Daten sammeln und in XML umwandeln" in der Anwendung AJAX. der JS console.log funktioniert in diesem Fall nicht; Es bricht die XML-Ausgabe. (Vielleicht hat jemand eine Lösung dafür?)

Xdebug etc hatte ähnliche Probleme.

Meine Lösung in Windows:

  • Richten Sie eine .txt-Datei ein, die leicht zugänglich und beschreibbar ist
  • Legen Sie die Variable PHP error_log in der .ini-Datei fest, um in diese Datei zu schreiben
  • Öffnen Sie die Datei im Windows-Datei-Explorer und öffnen Sie ein Vorschaufenster
  • Verwenden Sie den Befehl error_log('myTest'); PHP, um Nachrichten zu senden

Diese Lösung ist einfach, erfüllt meine Anforderungen meistens, Standard-PHP, und das Vorschaufenster wird bei jedem Schreiben von PHP automatisch aktualisiert.

14
Klompenrunner

Als Autor der verlinkten Webseite in der populären Antwort oben möchte ich meine letzte Version dieser einfachen Hilfsfunktion hinzufügen, viel solider.

Ich benutze json_encode(), um zu überprüfen, ob der var-Typ nicht notwendig ist, und füge auch einen Puffer hinzu, um Probleme mit Frameworks zu lösen, da header() keine feste Rückkehr oder übermäßige Verwendung hat. 

/**
 * 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;
}

Verwendungszweck

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

Screenshot des Ergebnisses

Auch ein einfaches Beispiel als Bild viel einfacher zu verstehen.

 enter image description here

14
bueltge

Ich denke es kann verwendet werden -

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

Ich finde das hilfreich:

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;
    }
}

Und benutze es wie:

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

Welche Ausgaben in der Konsole:

Important
 Less Important
     Even Less Important
Again Important

Sie können weniger wichtige Protokolle deaktivieren, indem Sie sie mit $ debug value einschränken

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

Kurz und einfach für Arrays, Strings oder auch Objekte.

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>";

PHP und Javascript Interaktion.

6
0DAYanc

Wenn Sie in die Protokolldatei PHP und nicht in die JavaScript-Konsole schreiben möchten, können Sie dies verwenden:

error_log("This is logged only to the PHP log")

Referenz: error_log

6

Es gibt auch eine hervorragende Google Chrome-Erweiterung PHP Console mit php library , die Folgendes ermöglicht:

  • Fehler und Ausnahme in der Chrome JavaScript-Konsole und in Benachrichtigungs-Popups anzeigen.
  • Geben Sie eine beliebige Typvariable aus.
  • Führen Sie den Code PHP remote aus.
  • Zugriff durch Passwort schützen.
  • Gruppenkonsolenprotokolle nach Anforderung.
  • Zur Fehlerdatei springen: Zeile in Ihrem Texteditor.
  • Fehler-/Debugdaten in die Zwischenablage kopieren (für Tester).
5
barbushin

Für Chrome gibt es eine Erweiterung namens Chrome Logger , die das Protokollieren von PHP - Nachrichten zulässt.

Die Firefox DevTools haben sogar integrierte Unterstützung für das Chrome Logger-Protokoll .

Um die Protokollierung zu aktivieren, müssen Sie lediglich die Datei 'ChromePhp.php' in Ihrem Projekt speichern. Dann kann es so verwendet werden:

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

Beispiel aus der GitHub-Seite .

Die Ausgabe kann dann wie folgt aussehen:

 Server log within Firefox DevTools

5

Ich habe all das aufgegeben für http://phptoolcase.com/guides/ptc-debug-guide.html Ich kann es gar nicht genug loben!

Klicken Sie einfach auf eine der Registerkarten oben rechts, oder klicken Sie auf "Klicken Sie hier", um zu erweitern/verbergen.

Beachten Sie die verschiedenen "Kategorien". Sie können auf ein beliebiges Array klicken, um es zu erweitern/zusammenzufassen.

Von der Webseite

"Haupteigenschaften:

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

Vielen Dank, ich habe nach einem Weg gesucht, Code in einem Wordpress-Plugin zu debuggen, das ich entwickelt habe und auf diesen Beitrag gestoßen ist.

Die für mich am besten zutreffenden Codestücke habe ich aus den obigen Antworten genommen und diese zu einer Funktion zusammengefasst, die ich zum Debuggen von Wordpress verwenden kann. Die Funktion ist:

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>";
}

Die Verwendung ist wie folgt:

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

Ich hoffe, jemand anderes findet diese Funktion nützlich.

Wenn diese Funktion bei der Wordpress-Entwicklung verwendet wird, sollte die Funktion in der Datei functions.php des untergeordneten Designs platziert werden und kann an einer beliebigen Stelle im Code aufgerufen werden.

3
Clinton

Bei Ajax-Anrufen oder xml/json-Antworten, bei denen Sie sich nicht mit dem Rumpf beschäftigen möchten, müssen Sie Protokolle über http-Header senden und diese dann mit einer Weberweiterung zur Konsole hinzufügen. So machen es FirePHP und QuantumPHP (eine Gabel von ChromePHP) in Firefox.

Wenn Sie die Geduld haben, ist x-debug eine bessere Option - Sie erhalten einen tieferen Einblick in PHP, können Ihr Skript anhalten, sehen, was los ist, und dann das Skript fortsetzen.

2
Frank Forte

Seit 2017 ist Firebug und damit Firephp deaktiviert.

Ich habe ein paar kleine Änderungen an dem Chromephp-Tool geschrieben, um eine nahtlose Migration von Firephp zu Firebug zum Debuggen über die Konsole zu ermöglichen.

Dieser Artikel erklärt in einfachen Schritten

https://medium.com/@kudehinbuoluwaponle/migrate-von-firephp-nach-chromephp-in-5-Minuten-ohne-brechender-existierendercode-e4afd1b28c5c

Jeder dieser beiden funktioniert:

<?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

Hier ist eine praktische Funktion. Es ist sehr einfach zu benutzen, erlaubt Ihnen, beliebig viele Argumente zu übergeben, und zeigt den Objektinhalt im Browser-Konsolenfenster an, als würden Sie von JavaScript Console.log aufrufen - jedoch von PHP

Beachten Sie, dass Sie auch Tags verwenden können, indem Sie 'TAG-YourTag' übergeben. Diese werden angewendet, bis ein anderer Tag gelesen wird, z. B. '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>";
            }       
        }
    }
}

ANMERKUNG: func_num_args () und func_num_args () sind PHP-Funktionen zum Lesen einer dynamischen Anzahl von Eingabearrgs und ermöglichen es dieser Funktion, unendlich viele console.log-Anforderungen von einem Funktionsaufruf zu haben

0
Chris Sprague