Wie kann ich in PHP auf die Konsole schreiben?

321

Ist es möglich, einen String zu schreiben oder sich in die Konsole einzuloggen?

Was ich meine

Genau wie in JSP wird etwas, das wir drucken system.out.println("some"), an der Konsole und nicht auf einer Seite angezeigt.

Labeeb Panampullan
quelle

Antworten:

145

Feuerfuchs

In Firefox können Sie eine Erweiterung namens FirePHP verwenden , die das Protokollieren und Speichern von Informationen aus Ihren PHP-Anwendungen auf der Konsole ermöglicht. Dies ist ein Addon zur fantastischen Webentwicklungserweiterung Firebug .

Chrom

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

In jüngerer Zeit befindet sich Clockwork in der aktiven Entwicklung, die die Entwicklertools um ein neues Bedienfeld erweitert, das nützliche Informationen zum Debuggen und Profilieren bietet. Es bietet sofort Unterstützung für Laravel 4 und Slim 2 und kann über die erweiterbare API hinzugefügt werden.

Verwenden von Xdebug

Ein besserer Weg, um Ihr PHP zu debuggen, wäre über Xdebug . Die meisten Browser bieten Hilfserweiterungen, mit denen Sie die erforderliche Cookie- / Abfragezeichenfolge übergeben können, um den Debugging-Prozess zu initialisieren.

Malachi
quelle
5
Es gibt auch eine Safari-Erweiterung zum Debuggen von PHP namens Xdebug Helper. Ich habe es von dieser Seite installiert: extensions.apple.com/#tab
Mark Mckelvie
3
Fire PHP Link ist tot
Brian Leishman
9
echo "<script> console.log ('PHP:',", get_option ("slide_data"), "); </ script>";
Azmat Karim Khan
4
OP gibt an, dass er auf Standardausgabe drucken wollte, nicht auf HTML / JS-Konsole.
beppe9000
6
FirePHP ist offiziell tot.
TimSparrow
405

Oder Sie verwenden den Trick von PHP Debug zur Konsole .

Zuerst benötigen Sie eine kleine PHP-Hilfsfunktion

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

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

Dann können Sie es so verwenden:

debug_to_console("Test");

Dadurch wird eine Ausgabe wie folgt erstellt:

Debug Objects: Test
Senador
quelle
5
In FireFox v27 wird es ausgegeben"Debug Objects: " . $data . ""
Mawg sagt, Monica am
Die einzige Möglichkeit, dies nützlicher zu machen, besteht darin, ein Variablenpaar $ name: 'data' im Protokoll zu erstellen. Gute Funktion.
Imperativ
10
@Mawg (und die Personen, die diesen Kommentar positiv bewertet haben): Wenn $datain der Ausgabe angezeigt wird, haben Sie die Funktion nicht genau wie gezeigt eingegeben. Sehen Sie sich Ihre einfachen und doppelten Anführungszeichen genau an, um sicherzustellen, dass sie mit dem obigen Code übereinstimmen. $dataist eine PHP-Variable; Wenn die Seite an den Browser gesendet wird, ist diese PHP-Variable durch den an übergebenen Parameter ersetzt worden debug_to_console. Der Browser sollte niemals sehen $data. (Wenn Sie page sourceim Browser schauen , sollte es nicht sagen $data.)
ToolmakerSteve
1
Danke für den Hinweis auf meinen Beitrag. Aber die Zeit und das Wissen haben sich geändert, die Funktion auch;) Ich habe es jetzt aktualisiert.
Bueltge
3
Mit anderen Worten lautet die Antwort wie folgt: echo "<script> console.log ('Debug Objects:". $ Output. "'); </ Script>";
Christine
67

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

<script>
    console.log(<?= json_encode($foo); ?>);
</script>
Travis
quelle
4
Dies fügt ein bisschen mehr Kontext hinzu:function debug_log( $object=null, $label=null ){ $message = json_encode($object, JSON_PRETTY_PRINT); $label = "Debug" . ($label ? " ($label): " : ': '); echo "<script>console.log(\"$label\", $message);</script>"; }
Robrecord
OP gibt an, dass er auf Standardausgabe drucken wollte, nicht auf HTML / JS-Konsole.
beppe9000
@ beppe9000 Das ist falsch. Das OP fragt, ob er von PHP auf die Konsole schreiben kann. Quote: "Ist es möglich, einen String zu schreiben oder sich in die Konsole einzuloggen?"
Dawson Irvine
Damit können Sie var_dumps und ähnliches vermeiden. Funktioniert hervorragend und mit der Konsole können Sie den JSON auf nette Weise umschalten.
Mbotet
41

Standardmäßig wird die gesamte Ausgabe an stdoutdie HTTP-Antwort oder die Konsole gesendet, je nachdem, ob Ihr Skript von Apache oder manuell in der Befehlszeile ausgeführt wird. Sie können es jedoch error_logfür die Protokollierung verwenden und verschiedene E / A-Streams können mit geschrieben werden fwrite.

nikc.org
quelle
8
Vielen Dank, error_logdas musste ich vom integrierten PHP-Webserver
Martín Coll
37

Versuche Folgendes. Es funktioniert:

echo("<script>console.log('PHP: " . $data . "');</script>");
Mandy
quelle
5
Dies ist nicht sehr in Echtzeit, da PHP die gesamte Seite sendet, sobald die Verarbeitung abgeschlossen ist. Wenn in der PHP-Datei ein Fehler auftritt, werden auch die Protokolle nicht angezeigt, da nur eine Fehlerseite zurückgegeben wird und Ihre früheren Ausdrucke ignoriert werden.
Miro Markaravanes
1
Ich möchte darauf hinweisen, dass @MiroMarkaravanes absolut korrekt ist - schwerwiegende Fehler können die Ausgabe Ihres console.log verhindern, es sei denn, Sie stellen sicher, dass Sie jeden einzelnen möglichen Fehler behandeln / abfangen. Insbesondere bei Verwendung der Ausgabepufferung - wenn Ihr Puffer es nicht auf den Bildschirm schafft, wird Ihre console.log-Ausgabe auch nicht angezeigt. Es ist etwas, worauf man achten muss.
Whoshotdk
1
OP gibt an, dass er auf Standardausgabe drucken wollte, nicht auf HTML / JS-Konsole.
beppe9000
19
echo 
"<div display='none'>
    <script type='text/javascript'>
        console.log('console log message');
    </script>
</div>";

Erstellt eine

<div>

mit dem

display="none"

damit das div nicht angezeigt wird, sondern das

console.log()

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

Neo
quelle
3
Technisch gesehen ist dies die richtige Antwort auf die erste Frage - wie man von PHP aus in die Browserkonsole schreibt. Aber ich denke, der Autor versucht, PHP zu debuggen, damit es bessere Optionen gibt. Es sollte jedoch nicht herabgestuft werden, streng genommen ist dies eine richtige Antwort.
Rolf
1
Ich fand es auf jeden Fall unglaublich hilfreich!
Albert
Diese Lösung ist einfach, weil sie selbsterklärend ist. Vor allem, wenn Sie gleichzeitig mit dem, was ich gerade durchmache, viel zu kauen haben.
Olu Adabonyan
2
Ich verstehe nicht, warum du überhaupt eine brauchst div. Wenn Sie nur einen <script>Block haben, wird im Browser nichts angezeigt.
Kodos Johnson
1
Wenn Ihre Fehlermeldung in einer Variablen gespeichert ist oder Anführungszeichen enthält, sollten Sie die Nachricht in einen Aufruf einbinden, json.encodedamit Anführungszeichen Ihre Codezeile nicht beschädigen. Zum Beispiel:echo "<script>console.log(".json_encode($msg).")</script>";
SherylHohman
18

Als Autor der verlinkten Webseite in der beliebten Antwort möchte ich meine letzte Version dieser einfachen Hilfsfunktion hinzufügen. Es ist viel fester.

Ich json_encode()überprüfe, ob der Variablentyp nicht erforderlich ist, und füge einen Puffer hinzu, um Probleme mit Frameworks zu lösen. Es gibt keine solide Rendite oder übermäßige Nutzung von 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;
}

Verwendungszweck

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

Screenshot des Ergebnisses

Auch ein einfaches Beispiel als Bild, um es viel einfacher zu verstehen:

Geben Sie hier die Bildbeschreibung ein

bueltge
quelle
Während ich tun , wie diese Idee, könnten Sie bestätigen , dass es für Ajax - Anfragen nicht geeignet wäre?
Mawg sagt, Monica
1
Ja, es ist reines statisches PHP, nicht Ajax.
Bueltge
Es scheint jedoch HML / JS-Code für einen Seitenkörper hinzuzufügen - und mein Ajax gibt keinen Seitenkörper zurück. Tut mir leid, aber ich verstehe nicht, dass ich versucht habe, mir zu helfen
Mawg sagt, Monica
1
Sie sollten die Hilfsfunktion auslösen, bevor Sie den Ajax-Aufruf anfordern. Dann erhalten Sie auch ein Ergebnis in der Konsole.
Bueltge
Also habe ich dort eine Variable eingefügt und jedes Zeichen ist in einer eigenen Zeile gelandet. Ein bisschen neugierig, warum es das tut? Nie benutzt console.info
Yardpenalty.com
17

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 String
jsLogs("testing string"); #PHP: testing string

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

# For Object
jsLogs(array("test1"=>array("subtest1", "subtest2"))); #PHP: {"test1":["subtest1","subtest2"]}
Pankaj Bisht
quelle
3
Sehr raffiniert. Danke @Pankaj Bisht
Vickar
2
Eine Erklärung wäre angebracht.
Peter Mortensen
14

Einige großartige Antworten, die mehr Tiefe hinzufügen; aber ich brauchte etwas einfacheres und ähnlicheres wie den JavaScript- console.log()Befehl.

Ich benutze PHP in vielen "Daten sammeln und in XML verwandeln" in Ajax-Anwendungen. Das JavaScript console.logfunktioniert in diesem Fall nicht. es bricht die XML-Ausgabe.

Xdebug usw. hatte ähnliche Probleme.

Meine Lösung in Windows:

  • Richten Sie eine .txtDatei ein, die leicht zugänglich und beschreibbar ist
  • Stellen Sie die PHP- error_logVariable in der .iniDatei so ein, dass in diese Datei geschrieben wird
  • Öffnen Sie die Datei im Windows- Datei-Explorer und öffnen Sie einen Vorschaufenster dafür
  • Verwenden Sie den error_log('myTest');PHP-Befehl, um Nachrichten zu senden

Diese Lösung ist einfach und erfüllt die meiste Zeit meine Anforderungen. Standard-PHP und das Vorschaufenster werden bei jedem Schreiben von PHP automatisch aktualisiert.

Klompenrunner
quelle
Würde das Einpacken der Nachricht json_encodeauch das Problem lösen? In diesem Fall können Anführungszeichen in der Nachricht die Anführungszeichen im Skript beeinträchtigen. (zum Beispiel :) echo "<script>console.log(".json_encode($msg).")</script>";. Wenn nicht, bin ich gespannt, welches Problem das Skript console.log verursacht hat und wie / warum Ihre Lösung das behoben hat. Ihre Lösung ist gut - ich versuche nur, mehr über die Bedingungen zu erfahren, die dazu geführt haben, dass die console.logXML-Ausgabe unterbrochen wurde. In vielen Fällen ist ein Fehlerprotokoll wie Sie viel besser als ein schnelles console.log.
SherylHohman
13
$variable = "Variable";
echo "<script>console.log('$variable');</script>";

PHP- und JavaScript-Interaktion.

0DAYanc
quelle
Eine Erklärung wäre angebracht. Können Sie näher darauf eingehen ( indem Sie Ihre Antwort bearbeiten , nicht indem Sie in Kommentaren antworten)?
Peter Mortensen
11

Ich finde das hilfreich:

function console($data, $priority, $debug)
{
    if ($priority <= $debug)
    {
        $output = '<script>console.log("' . str_repeat(" ", $priority-1) . (is_array($data) ? implode(",", $data) : $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 Ausgänge in der Konsole:

Important
 Less Important
     Even Less Important
Again Important

Und Sie können weniger wichtige Protokolle ausschalten, indem Sie sie mit dem Wert $ debug einschränken.

zee
quelle
Wenn Sie also anrufen, wird console('Even Less Important' ,6 , $debug);dies nicht in der Konsole angezeigt? warum so? wird etwas über 5 nicht angezeigt
HattrickNZ
2
@HattrickNZ Hiermit können Sie verschiedene Ebenen von Protokollnachrichten erstellen. Wenn Sie debuggen, möchten Sie möglicherweise einen sehr gesprächigen Nachrichtenstrom mit vielen Informationen anzeigen. Während des normalen Betriebs können Sie das Debuggen jedoch auf 1 setzen, damit nur die wichtigsten Fehler / Protokollelemente angezeigt werden. Es liegt an Ihnen, zu entscheiden, welche Elemente beim Schreiben des Codes wichtig sind.
Toby Allen
OP gibt an, dass er auf Standardausgabe drucken wollte, nicht auf HTML / JS-Konsole.
beppe9000
1
Ja, aber wiederholter Code (Redundanz) - sollte überarbeitet werden: $output = '<script>console.log("' . str_repeat(" ", $priority-1)und . '");</script>';. Nur implode(",", $data)und $dataist anders.
Peter Mortensen
1
@ Peter Mortensen - wahre Geschichte! Bearbeitet diesen über 4yo Beitrag! :)
zee
7

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;
}
Carlos Lugo
quelle
1
OP gibt an, dass er auf dem serverseitigen Terminal / der Standardausgabe drucken wollte, nicht auf der HTML / JS-Konsole.
beppe9000
7
function phpconsole($label='var', $x) {
    ?>
    <script type="text/javascript">
        console.log('<?php echo ($label)?>');
        console.log('<?php echo json_encode($x)?>');
    </script>
    <?php
}
Ashraf Mohammed
quelle
1
OP gibt an, dass er auf dem serverseitigen Terminal / der Standardausgabe drucken wollte, nicht auf der HTML / JS-Konsole.
beppe9000
7

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

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

Referenz: error_log

Dan Green-Leipciger
quelle
Dann springen Sie einfach in ssh und
Hayden Thring
6

Für Chrome gibt es eine Erweiterung namens Chrome Logger , mit der PHP-Nachrichten protokolliert werden können.

Die Firefox DevTools unterstützen sogar das Chrome Logger-Protokoll .

Um die Protokollierung zu aktivieren, müssen Sie nur 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 von der GitHub-Seite .

Die Ausgabe kann dann folgendermaßen aussehen:

Serverprotokoll in Firefox DevTools

Sebastian Zartner
quelle
Sie können es auch über Composer installieren:"ccampbell/chromephp": "*"
PadawanTony
5

Es gibt auch eine großartige Google Chrome-Erweiterung, PHP Console , mit einer PHP-Bibliothek , mit der Sie:

  • Siehe Fehler und Ausnahmen in der Chrome JavaScript-Konsole und in den Benachrichtigungs-Popups.
  • Dump jede Art von Variable.
  • Führen Sie PHP-Code remote aus.
  • Schützen Sie den Zugriff mit einem Passwort.
  • Gruppieren Sie Konsolenprotokolle auf Anfrage.
  • Wechseln Sie error file:linein Ihrem Texteditor zu.
  • Kopieren Sie Fehler- / Debug-Daten in die Zwischenablage (für Tester).
Barbushin
quelle
1
Meine bevorzugte Methode zum Schreiben von PHP-Fehlern, Ausnahmen und benutzerdefinierten Debugging-Ausgaben in die JS-Konsole. Ich benutze es seit Jahren - sehr zuverlässig und mit PHP-Revisionen auf dem neuesten Stand. Ich würde nichts anderes benutzen.
Velojet
3

Ich suchte nach einer Möglichkeit, Code in einem von mir entwickelten WordPress-Plugin zu debuggen, und stieß auf diesen Beitrag.

Ich habe die Code-Teile, die für mich am besten geeignet sind, aus anderen Antworten genommen und diese zu einer Funktion kombiniert, 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);

Wenn diese Funktion bei der WordPress-Entwicklung verwendet wird, sollte die Funktion in der functions.phpDatei des untergeordneten Themas platziert werden und kann dann an einer beliebigen Stelle im Code aufgerufen werden.

Clinton
quelle
2

Ich habe all das zugunsten von Debugger & Logger aufgegeben . Ich kann es nicht genug loben!

Klicken Sie einfach auf eine der Registerkarten oben rechts oder auf "Hier klicken", um sie zu erweitern / auszublenden.

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

Von der Webseite

Haupteigenschaften:

  • Globale Variablen anzeigen ($ GLOBALS, $ _POST, $ _GET, $ _COOKIE usw.)
  • PHP-Version und geladene Erweiterungen anzeigen
  • Ersetzen Sie den in PHP integrierten Fehlerbehandler
  • Protokollieren Sie SQL-Abfragen
  • Überwachen Sie die Ausführungszeit von Code- und SQL-Abfragen
  • Überprüfen Sie die Variablen auf Änderungen
  • Ablaufverfolgung von Funktionsaufrufen
  • Analyse der Codeabdeckung, um zu überprüfen, welche Skriptzeilen ausgeführt wurden
  • Speicherauszug aller Arten von Variablen
  • Dateiinspektor mit Code-Textmarker zum Anzeigen des Quellcodes
  • Senden Sie Nachrichten für Ajax-Skripte an die JavaScript-Konsole (nur Chrome)

Geben Sie hier die Bildbeschreibung ein

Mawg sagt, Monica wieder einzusetzen
quelle
Hallo. Gibt es eine neueste Gabel oder ein ähnliches Werkzeug, das aktueller ist und derzeit gewartet wird?
Metafaniel
Ich habe es nicht codiert, also gehe ich für die neueste Gabel einfach zu GitHub? Fragen Sie nach softwarerecs.stackexchange.com und wir helfen Ihnen weiter.
Mawg sagt, Monica
1
@ MawgHi, danke. Ich habe gefragt, weil phptoolcase Github und die dort aufgeführten Gabeln seit 5 Jahren nicht mehr aktualisiert wurden. Vielen Dank für die andere StackExchange-Site. Ich habe gerade Clockwork gefunden . Ich frage mich, ob es ähnlich oder besser ist ...
Metafaniel
Und ich danke Ihnen für ein Uhrwerk. Es sieht ausgezeichnet aus (nur schade, dass ich keines dieser Frameworks verwende (ich frage mich, ob es so Datenbankabfragen ausgeben kann - indem es das Framework einbindet)). Es lohnt sich zu untersuchen. (+1)
Mawg sagt, dass Monica
2

Bei Ajax-Aufrufen oder XML / JSON-Antworten, bei denen Sie sich nicht mit dem Text herumschlagen möchten, müssen Sie Protokolle über HTTP-Header senden und diese dann mit einer Web-Erweiterung zur Konsole hinzufügen. So machen es FirePHP (nicht mehr verfügbar) und QuantumPHP (eine Gabelung 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 gerade passiert, und dann das Skript fortsetzen.

Frank Forte
quelle
2

Ich könnte zu spät zu einer Party kommen, aber ich suchte nach einer Implementierung der Protokollierungsfunktion, die:

  • verwendet eine variable Anzahl von durch Kommas getrennten Argumenten, genau wie Javascript console.log() ,
  • gibt eine formatierte Ausgabe (nicht nur eine serialisierte Zeichenfolge),
  • ist von einem gängigen Javascript unterscheidbar console.log().

Die Ausgabe sieht also so aus:

Geben Sie hier die Bildbeschreibung ein

(Das folgende Snippet wurde auf PHP getestet 7.2.11. Ich bin mir nicht sicher, ob es auf PHP abwärtskompatibel ist. Es kann auch ein Problem für Javascript sein (in einem Begriff alter Browser), da es nach console.log()Argumenten ein nachfolgendes Komma erzeugt - was nicht der Fall ist legal bis ES 2017.)

<?php

function console_log(...$args)
{
    $args_as_json = array_map(function ($item) {
        return json_encode($item);
    }, $args);

    $js_code = "<script>console.log('%c 💬 log from PHP: ','background: #474A8A; color: #B0B3D6; line-height: 2',";
    foreach ($args_as_json as $arg) {
        $js_code .= "{$arg},";
    }
    $js_code .= ")</script>";

    echo $js_code;
}

$list = ['foo', 'bar'];
$obj = new stdClass();
$obj->first_name = 'John';
$obj->last_name = 'Johnson';

echo console_log($list, 'Hello World', 123, $obj);

?>
HynekS
quelle
Dieser Ausschnitt hat mich gerettet. :) Ich musste einige Änderungen am Produktionscode vornehmen, ohne Zugriff auf die eigentlichen Server zu haben, und dies war perfekt, um das Problem zu umgehen. Vielen Dank!
Raphael Aleixo
Ich bin froh, dass ich helfen konnte.
HynekS
1

Alle diese beiden funktionieren:

<?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>");
?>
Roybraym
quelle
0

Verwenden:

function console_log($data) {
    $bt = debug_backtrace();
    $caller = array_shift($bt);

    if (is_array($data))
        $dataPart = implode(',', $data);
    else
        $dataPart = $data;

    $toSplit = $caller['file'])) . ':' .
               $caller['line'] . ' => ' . $dataPart

    error_log(end(split('/', $toSplit));
}
BTM1
quelle
1
Sie sollten einen Hinweis zu Ihrer Idee und Lösung hinzufügen. Auch die Quelle hat unbenutzte Quelle.
Bueltge
0

Hier ist eine praktische Funktion. Es ist sehr einfach zu bedienen, ermöglicht es Ihnen, beliebig viele Argumente eines beliebigen Typs zu übergeben und zeigt den Objektinhalt im Browser-Konsolenfenster so an, als hätten Sie console.log über JavaScript aufgerufen - aber über PHP

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

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

Chris Sprague
quelle
0

Hier ist meine Lösung. Das Gute an dieser ist, dass Sie so viele Parameter übergeben können, wie Sie möchten.

function console_log()
{
    $js_code = 'console.log(' . json_encode(func_get_args(), JSON_HEX_TAG) .
        ');';
    $js_code = '<script>' . $js_code . '</script>';
    echo $js_code;
}

Nennen Sie es so

console_log('DEBUG>>', 'Param 1', 'Param 2');
console_log('Console DEBUG:', $someRealVar1, $someVar, $someArray, $someObj);

Jetzt sollten Sie in der Lage sein, die Ausgabe in Ihrer Konsole zu sehen, fröhliche Codierung :)

Imran Zahoor
quelle
0

Obwohl dies eine alte Frage ist, habe ich danach gesucht. Hier ist meine Zusammenstellung einiger hier beantworteter Lösungen und einiger anderer Ideen, die an anderer Stelle gefunden wurden, um eine Einheitslösung zu erhalten.

CODE:

    // Post to browser console
    function console($data, $is_error = false, $file = false, $ln = false) {
        if(!function_exists('console_wer')) {
            function console_wer($data, $is_error = false, $bctr, $file, $ln) {
                echo '<div display="none">'.'<script type="text/javascript">'.(($is_error!==false) ? 'if(typeof phperr_to_cns === \'undefined\') { var phperr_to_cns = 1; document.addEventListener("DOMContentLoaded", function() { setTimeout(function(){ alert("Alert. see console."); }, 4000); });  }' : '').' console.group("PHP '.(($is_error) ? 'error' : 'log').' from "+window.atob("'.base64_encode((($file===false) ? $bctr['file'] : $file)).'")'.((($ln!==false && $file!==false) || $bctr!==false) ? '+" on line '.(($ln===false) ? $bctr['line'] : $ln).' :"' : '+" :"').'); console.'.(($is_error) ? 'error' : 'log').'('.((is_array($data)) ? 'JSON.parse(window.atob("'.base64_encode(json_encode($data)).'"))' : '"'.$data.'"').'); console.groupEnd();</script></div>'; return true;
            }
        }
        return @console_wer($data, $is_error, (($file===false && $ln===false) ? array_shift(debug_backtrace()) : false), $file, $ln);
    }

    //PHP Exceptions handler
    function exceptions_to_console($svr, $str, $file, $ln) {
        if(!function_exists('severity_tag')) {
            function severity_tag($svr) {
                $names = [];
                $consts = array_flip(array_slice(get_defined_constants(true)['Core'], 0, 15, true));
                foreach ($consts as $code => $name) {
                    if ($svr & $code) $names []= $name;
                }
                return join(' | ', $names);
            }
        }
        if (error_reporting() == 0) {
            return false;
        }
        if(error_reporting() & $svr) {
            console(severity_tag($svr).' : '.$str, true, $file, $ln);
        }
    }

    // Divert php error traffic
    error_reporting(E_ALL);  
    ini_set("display_errors", 1);
    set_error_handler('exceptions_to_console');

TESTS & NUTZUNG:

Die Verwendung ist einfach. Fügen Sie die erste Funktion zum manuellen Posten auf der Konsole hinzu. Verwenden Sie die zweite Funktion, um die Behandlung von PHP-Ausnahmen umzuleiten. Der folgende Test sollte eine Idee geben.

    // Test 1 - Auto - Handle php error and report error with severity info
    $a[1] = 'jfksjfks';
    try {
          $b = $a[0];
    } catch (Exception $e) {
          echo "jsdlkjflsjfkjl";
    }

    // Test 2 - Manual - Without explicitly providing file name and line no.
          console(array(1 => "Hi", array("hellow")), false);

    // Test 3 - Manual - Explicitly providing file name and line no.
          console(array(1 => "Error", array($some_result)), true, 'my file', 2);

    // Test 4 - Manual - Explicitly providing file name only.
          console(array(1 => "Error", array($some_result)), true, 'my file');

ERKLÄRUNG:

  • Die Funktion verwendet einen console($data, $is_error, $file, $fn)String oder ein Array als erstes Argument und stellt es mithilfe von js-Einfügungen auf der Konsole bereit.

  • Das zweite Argument ist ein Flag, um normale Protokolle von Fehlern zu unterscheiden. Bei Fehlern fügen wir Ereignis-Listener hinzu, um uns durch Warnungen zu informieren, wenn Fehler ausgelöst wurden, und um sie auch in der Konsole hervorzuheben. Dieses Flag ist standardmäßig auf false gesetzt.

  • Das dritte und vierte Argument sind explizite Deklarationen von Datei- und Zeilennummern, was optional ist. Wenn sie nicht vorhanden sind, verwenden sie standardmäßig die vordefinierte PHP-Funktion debug_backtrace(), um sie für uns abzurufen.

  • Die nächste Funktion exceptions_to_console($svr, $str, $file, $ln)hat vier Argumente in der Reihenfolge, die vom PHP-Standardausnahmehandler aufgerufen wird. Hier ist das erste Argument der Schweregrad, den wir mit vordefinierten Konstanten unter Verwendung der Funktion weiter überprüfen severity_tag($code), um weitere Informationen zu Fehlern bereitzustellen.

BEACHTEN :

  • Der obige Code verwendet JS-Funktionen und -Methoden, die in älteren Browsern nicht verfügbar sind. Aus Gründen der Kompatibilität mit älteren Versionen muss es ersetzt werden.

  • Der obige Code dient zum Testen von Umgebungen, in denen Sie allein Zugriff auf die Site haben. Verwenden Sie dies nicht in Live-Websites (Produktionswebsites).

VORSCHLÄGE :

  • Die erste Funktion hat console()einige Hinweise ausgegeben, daher habe ich sie in eine andere Funktion eingeschlossen und sie mit dem Fehlerkontrolloperator '@' aufgerufen. Dies kann vermieden werden, wenn Ihnen die Hinweise nichts ausmachen.

  • Zu guter Letzt kann das Auftauchen von Warnungen beim Codieren ärgerlich sein. Dafür verwende ich diesen Piepton (in Lösung gefunden: https://stackoverflow.com/a/23395136/6060602 ) anstelle von Popup-Warnungen. Es ist ziemlich cool und die Möglichkeiten sind endlos. Sie können Ihre Lieblingsmusik spielen und das Codieren weniger stressig machen.

Ajay Singh
quelle