Bagaimana saya bisa menulis ke konsol dalam PHP?

324

Apakah mungkin menulis string atau masuk ke konsol?

Apa yang saya maksud

Sama seperti di JSP, jika kita mencetak sesuatu seperti system.out.println("some"), itu akan ada di konsol, bukan di halaman.

Labeeb Panampullan
sumber

Jawaban:

145

Firefox

Di Firefox Anda dapat menggunakan ekstensi bernama FirePHP yang memungkinkan proses logging dan dumping informasi dari aplikasi PHP Anda ke konsol. Ini adalah tambahan untuk ekstensi pengembangan web Firebug yang luar biasa .

Chrome

Namun jika Anda menggunakan Chrome, ada alat debugging PHP yang disebut Chrome Logger atau webug (webug memiliki masalah dengan urutan log).

Baru-baru ini Clockwork sedang dalam pengembangan aktif yang memperluas Alat Pengembang dengan menambahkan panel baru untuk memberikan informasi debug dan profil yang berguna. Ini memberikan keluar dari kotak dukungan untuk LARAVEL 4 dan Slim 2 dan dukungan dapat ditambahkan melalui API extensible nya.

Menggunakan Xdebug

Cara yang lebih baik untuk men-debug PHP Anda adalah melalui Xdebug . Sebagian besar browser menyediakan ekstensi pembantu untuk membantu Anda melewatkan string cookie / kueri yang diperlukan untuk menginisialisasi proses debugging.

Maleakhi
sumber
5
Ada juga ekstensi Safari untuk debugging PHP yang disebut Xdebug Helper. Saya menginstalnya dari halaman ini: extensions.apple.com/#tab
Mark Mckelvie
3
Tautan api PHP mati
Brian Leishman
9
echo "<script> console.log ('PHP:',", get_option ("slides_data"), "); </script>";
Azmat Karim Khan
4
OP menyatakan dia ingin mencetak ke output standar, bukan ke konsol html / js.
beppe9000
6
FirePHP secara resmi mati.
TimSparrow
407

Atau Anda menggunakan trik dari PHP Debug ke konsol .

Pertama, Anda perlu sedikit fungsi bantuan PHP

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

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

Maka Anda dapat menggunakannya seperti ini:

debug_to_console("Test");

Ini akan membuat output seperti ini:

Debug Objects: Test
Senador
sumber
5
Dalam FireFox v27 itu keluaran"Debug Objects: " . $data . ""
Mawg mengatakan mengembalikan Monica
Satu-satunya cara untuk membuat ini lebih bermanfaat adalah dengan melakukan variabel $ name: pasangan 'data' di log. Fungsinya bagus.
Imperatif
10
@ Mawg (dan orang-orang yang memvotasikan komentar itu): Jika $datamuncul di output, maka Anda belum mengetik fungsi persis seperti yang ditunjukkan. Perhatikan baik-baik tanda kutip tunggal dan ganda, untuk memastikan mereka cocok dengan kode di atas. $dataadalah variabel php; pada saat halaman dikirim ke browser, variabel php itu akan digantikan oleh parameter yang diteruskan ke debug_to_console. Browser seharusnya tidak pernah melihat $data. (Jika Anda melihat page sourcedi browser, seharusnya tidak dikatakan $data.)
ToolmakerSteve
1
Terima kasih atas petunjuknya pada posting saya. Tetapi waktu dan pengetahuan telah berubah, fungsinya juga;) Saya sudah memperbarui sekarang.
bueltge
3
Jadi, dengan kata lain, jawabannya adalah ini: echo "<script> console.log ('Objek Debug:". $ Output. "'); </script>";
Christine
69

Jika Anda mencari pendekatan sederhana, gema sebagai JSON:

<script>
    console.log(<?= json_encode($foo); ?>);
</script>
Travis
sumber
4
Ini menambahkan sedikit lebih banyak konteks: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 menyatakan dia ingin mencetak ke output standar, bukan ke konsol html / js.
beppe9000
@ beppe9000 Itu tidak benar. OP bertanya apakah dia bisa menulis dari PHP ke konsol. Quote: "Apakah mungkin menulis string atau masuk ke konsol?"
Dawson Irvine
dengan ini, Anda dapat menghindari var_dumps dan sejenisnya. Bekerja dengan baik dan konsol memungkinkan Anda beralih json dengan cara yang baik.
Mbotet
41

Secara default, semua output menuju stdout, yang merupakan respons HTTP atau konsol, tergantung pada apakah skrip Anda dijalankan oleh Apache atau secara manual pada baris perintah. Tetapi Anda dapat menggunakannya error_loguntuk mencatat dan berbagai aliran I / O dapat digunakan untuk menulis fwrite.

nikc.org
sumber
8
Terima kasih, error_logadalah apa yang saya butuhkan untuk output ke terminal dari server web
bawaan
37

Coba yang berikut ini. Ini bekerja:

echo("<script>console.log('PHP: " . $data . "');</script>");
Mandy
sumber
5
Ini bukan waktu yang sebenarnya, karena php mengirim semua halaman setelah selesai diproses. Selain itu, jika ada kesalahan dalam file php, Anda tidak akan melihat log apa pun, karena itu hanya akan mengembalikan halaman kesalahan, sehingga mengabaikan cetakan Anda sebelumnya.
Miro Markaravanes
1
Saya ingin menunjukkan bahwa @MiroMarkaravanes benar-benar benar - kesalahan fatal dapat mencegah keluaran console.log Anda kecuali Anda memastikan untuk menangani / menangkap setiap kemungkinan kesalahan. Terutama ketika menggunakan buffering output - jika buffer Anda tidak berhasil ke layar, output console.log Anda juga tidak. Ini sesuatu yang harus diperhatikan.
whoshotdk
1
OP menyatakan dia ingin mencetak ke output standar, bukan ke konsol html / js.
beppe9000
19
echo 
"<div display='none'>
    <script type='text/javascript'>
        console.log('console log message');
    </script>
</div>";

Menciptakan a

<div>

dengan

display="none"

sehingga div tidak ditampilkan, tetapi

console.log()

fungsi dibuat dalam javascript. Jadi, Anda mendapatkan pesan di konsol.

Neo
sumber
3
Secara teknis ini adalah jawaban yang tepat untuk pertanyaan awal - cara menulis ke konsol browser dari PHP. Tapi saya pikir penulis mencoba men-debug PHP sehingga ada opsi yang lebih baik. Seharusnya tidak dibatalkan, meskipun secara tegas ini adalah jawaban yang benar.
Rolf
1
Saya tentu saja merasa sangat membantu!
albert
Sederhananya, solusi ini sangat bagus karena cukup jelas. Terutama ketika Anda memiliki banyak untuk dikunyah pada saat yang sama seperti yang saya alami sekarang.
Olu Adabonyan
2
Saya tidak mengerti mengapa Anda membutuhkan div. jika Anda hanya memiliki <script>blok, tidak ada yang ditampilkan di browser.
Kodos Johnson
1
Juga, jika pesan kesalahan Anda disimpan dalam variabel, atau jika itu berisi tanda kutip, Anda sebaiknya membungkus pesan itu dalam panggilan json.encodesehingga tanda kutip tidak merusak baris kode Anda. Sebagai contoh:echo "<script>console.log(".json_encode($msg).")</script>";
SherylHohman
18

Sebagai penulis laman web tertaut dalam jawaban populer , saya ingin menambahkan versi terakhir dari fungsi pembantu sederhana ini. Itu jauh lebih solid.

Saya gunakan json_encode()untuk melakukan pengecekan jika tipe variabel tidak diperlukan dan juga menambahkan buffer untuk menyelesaikan masalah dengan framework. Tidak ada pengembalian yang solid atau penggunaan berlebihan 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;
}

Pemakaian

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

Tangkapan layar hasilnya

Juga contoh sederhana sebagai gambar untuk memahaminya lebih mudah:

Masukkan deskripsi gambar di sini

bueltge
sumber
Sementara saya melakukan seperti ide ini, bisa Anda mengkonfirmasi bahwa itu tidak akan cocok untuk permintaan Ajax?
Mawg mengatakan mengembalikan Monica
1
Ya, itu adalah php statis murni, bukan Ajax.
bueltge
Tapi, sepertinya akan menambahkan kode HML / JS dari badan halaman - dan Ajax saya tidak mengembalikan badan halaman. Maaf, tapi saya tidak undertsand & thansk untuk mencoba atau membantu saya
Mawg mengatakan mengembalikan Monica
1
Anda harus memicu fungsi helper sebelum meminta panggilan ajax, lalu Anda mendapatkan hasil di konsol.
bueltge
Jadi saya meletakkan variabel di sana dan setiap Karakter berakhir pada barisnya sendiri. Agak penasaran kenapa melakukan itu? Tidak pernah digunakan console.info
yardpenalty.com
17

Saya pikir itu bisa digunakan -

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
sumber
3
Yang sangat canggih. Terima kasih @Pankaj Bisht
Vickar
2
Penjelasan akan diurutkan.
Peter Mortensen
14

Beberapa jawaban bagus yang menambah kedalaman; tetapi saya membutuhkan sesuatu yang lebih sederhana dan lebih mirip dengan console.log()perintah JavaScript .

Saya menggunakan PHP di banyak "pengumpulan data dan berubah menjadi XML" di aplikasi Ajax. JavaScript console.logtidak berfungsi dalam hal ini; itu merusak output XML.

Xdebug, dll. Memiliki masalah serupa.

Solusi saya di Windows:

  • Setup .txtfile yang agak mudah untuk diakses dan ditulis
  • Atur error_logvariabel PHP di.ini file untuk menulis ke file itu
  • Buka file di Windows File Explorer dan buka panel pratinjau untuk itu
  • Gunakan error_log('myTest');perintah PHP untuk mengirim pesan

Solusi ini sederhana dan memenuhi sebagian besar kebutuhan saya. PHP standar, dan panel pratinjau secara otomatis memperbarui setiap kali PHP menulisnya.

Klompenrunner
sumber
Apakah membungkus pesan json_encodejuga akan menyelesaikan masalah? Jika demikian, mungkin tanda kutip di dalam pesan mengganggu tanda kutip dalam skrip. (misalnya echo "<script>console.log(".json_encode($msg).")</script>";:). Jika tidak, saya ingin tahu apa masalahnya yang menyebabkan skrip console.log rusak, dan bagaimana / mengapa solusi Anda memperbaikinya. Solusi Anda bagus - Saya hanya mencoba mempelajari lebih lanjut tentang kondisi yang menyebabkan console.logatau output xml rusak. Dalam banyak kasus, log kesalahan seperti yang Anda lakukan jauh lebih baik daripada cepat console.log.
SherylHohman
13
$variable = "Variable";
echo "<script>console.log('$variable');</script>";

Interaksi PHP dan JavaScript.

0DAYanc
sumber
Penjelasan akan diurutkan. Bisakah Anda menguraikan ( dengan mengedit jawaban Anda , bukan dengan menjawab dalam komentar)?
Peter Mortensen
11

Saya menemukan ini bermanfaat:

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

Dan gunakan seperti:

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

Output mana di konsol:

Important
 Less Important
     Even Less Important
Again Important

Dan Anda dapat mematikan log yang kurang penting dengan membatasi mereka menggunakan nilai $ debug.

zee
sumber
jadi jika Anda menelepon console('Even Less Important' ,6 , $debug);ini tidak akan ditampilkan di konsol? kenapa begitu? adalah apa pun di atas 5 tidak ditampilkan
HattrickNZ
2
@HattrickNZ Ini untuk memungkinkan Anda memiliki berbagai tingkat pesan log. Jika Anda melakukan debug, Anda mungkin ingin menunjukkan aliran pesan yang sangat cerewet dengan banyak info, namun selama operasi normal Anda dapat mengatur debug ke 1 sehingga Anda hanya mendapatkan kesalahan / log item yang paling penting yang ditampilkan. Terserah Anda untuk memutuskan item apa yang penting saat menulis kode.
Toby Allen
OP menyatakan dia ingin mencetak ke output standar, bukan ke konsol html / js.
beppe9000
1
Ya, tetapi kode berulang (redundansi) - harus di refactored: $output = '<script>console.log("' . str_repeat(" ", $priority-1)dan . '");</script>';. Hanya implode(",", $data)dan $databerbeda.
Peter Mortensen
1
@Peter Mortensen - kisah nyata! Diedit ini lebih dari 4yo posting! :)
zee
7

Singkat dan mudah, untuk array, string atau juga objek.

function console_log( $data ) {
  $output  = "<script>console.log( 'PHP debugger: ";
  $output .= json_encode(print_r($data, true));
  $output .= "' );</script>";
  echo $output;
}
Carlos Lugo
sumber
1
OP menyatakan ia ingin mencetak ke terminal sisi server / output standar, bukan ke konsol html / js.
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
sumber
1
OP menyatakan ia ingin mencetak ke terminal sisi server / output standar, bukan ke konsol html / js.
beppe9000
7

Jika Anda ingin menulis ke file log PHP, dan bukan konsol JavaScript, Anda dapat menggunakan ini:

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

Referensi: error_log

Dan Green-Leipciger
sumber
Kemudian lompat saja ssh dan ikuti log
Hayden Thring
6

Untuk Chrome ada ekstensi yang disebut Chrome Logger memungkinkan untuk mencatat pesan PHP.

Firefox DevTools bahkan memiliki dukungan terintegrasi untuk protokol Chrome Logger .

Untuk mengaktifkan pencatatan, Anda hanya perlu menyimpan file 'ChromePhp.php' di proyek Anda. Maka bisa digunakan seperti ini:

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

Contoh diambil dari halaman GitHub .

Outputnya kemudian terlihat seperti ini:

Log server dalam Firefox DevTools

Sebastian Zartner
sumber
Anda juga dapat menginstalnya melalui komposer:"ccampbell/chromephp": "*"
padawanTony
5

Ada juga ekstensi Google Chrome, PHP Console , dengan perpustakaan PHP yang memungkinkan Anda untuk:

  • Lihat kesalahan dan pengecualian di konsol JavaScript Chrome dan di sembulan pemberitahuan.
  • Buang semua jenis variabel.
  • Jalankan kode PHP dari jarak jauh.
  • Lindungi akses dengan kata sandi.
  • Log konsol grup berdasarkan permintaan.
  • Langsung ke error file:linedalam editor teks Anda.
  • Salin data kesalahan / debug ke clipboard (untuk penguji).
barbushin
sumber
1
Metode yang saya pilih untuk menulis kesalahan PHP, pengecualian dan keluaran debug yang ditentukan pengguna ke konsol JS. Saya telah menggunakannya selama bertahun-tahun - sangat andal dan terus diperbarui dengan revisi PHP. Saya tidak akan menggunakan yang lain.
Velojet
3

Saya sedang mencari cara untuk men-debug kode dalam plugin WordPress yang saya kembangkan dan menemukan posting ini.

Saya mengambil bit kode yang paling berlaku bagi saya dari respons lain dan menggabungkannya menjadi fungsi yang dapat saya gunakan untuk debugging WordPress. Fungsinya adalah:

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

Penggunaannya adalah sebagai berikut:

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

Jika fungsi ini digunakan dengan pengembangan WordPress, fungsi tersebut harus ditempatkan dalam functions.phpfile tema anak dan kemudian dapat dipanggil di mana saja dalam kode.

Clinton
sumber
2

Saya telah meninggalkan semua hal di atas demi Debugger & Logger . Saya tidak bisa cukup memujinya!

Cukup klik pada salah satu tab di kanan atas, atau pada "klik di sini" untuk membuka / menyembunyikan.

Perhatikan "kategori" yang berbeda. Anda dapat mengklik sembarang array untuk memperluas / menciutkannya.

Dari halaman web

Fitur utama:

  • Tampilkan variabel global ($ GLOBALS, $ _POST, $ _GET, $ _COOKIE, dll.)
  • Tampilkan versi PHP dan ekstensi yang dimuat
  • Ganti PHP yang terintegrasi dengan penangan kesalahan
  • Catat kueri SQL
  • Monitor kode dan waktu eksekusi query SQL
  • Periksa variabel untuk perubahan
  • Fungsi panggilan tracing
  • Analisis cakupan kode untuk memeriksa baris skrip mana yang dijalankan
  • Dump semua jenis variabel
  • Pemeriksa file dengan penyorot kode untuk melihat kode sumber
  • Kirim pesan ke konsol JavaScript (hanya Chrome), untuk skrip Ajax

Masukkan deskripsi gambar di sini

Mawg berkata mengembalikan Monica
sumber
Hai. Apakah ada garpu terbaru atau alat serupa yang lebih mutakhir dan saat ini dirawat?
Metafaniel
Saya tidak kode itu, jadi untuk garpu terbaru, saya kira hanya pergi ke GitHub? Untuk alternatif, tanyakan di softwarerecs.stackexchange.com dan kami akan membantu Anda.
Mawg mengatakan mengembalikan Monica
1
@ MaGHi, terima kasih. Saya bertanya karena phptoolcase Github dan garpu yang terdaftar di sana belum diperbarui dalam 5 tahun. Terima kasih untuk situs StackExchange lainnya. Saya baru saja menemukan Clockwork . Saya ingin tahu apakah ini mirip atau lebih baik ...
Metafaniel
Dan terima Anda untuk Clockwork. Ini terlihat sangat baik (hanya sayangnya saya tidak menggunakan salah satu dari kerangka kerja tersebut (saya ingin tahu apakah itu caranya membuang permintaan basis data - dengan mengaitkan kerangka tersebut)). Layak diselidiki. (+1)
Mawg mengatakan mengembalikan Monica
2

Untuk panggilan Ajax atau respons XML / JSON, di mana Anda tidak ingin mengacaukan tubuh, Anda perlu mengirim log melalui tajuk HTTP, lalu menambahkannya ke konsol dengan ekstensi web. Ini adalah bagaimana FirePHP (tidak lagi tersedia) dan QuantumPHP (garpu ChromePHP) melakukannya di Firefox.

Jika Anda memiliki kesabaran, x-debug adalah pilihan yang lebih baik - Anda mendapatkan wawasan yang lebih dalam tentang PHP, dengan kemampuan untuk menjeda skrip Anda, melihat apa yang sedang terjadi, kemudian melanjutkan skrip.

Frank Forte
sumber
2

Saya mungkin terlambat menghadiri pesta, tetapi saya mencari implementasi fungsi logging yang:

  • mengambil sejumlah variabel argumen yang dipisahkan koma, seperti halnya javascript console.log() ,
  • memberikan output yang diformat (bukan hanya string serial),
  • dibedakan dari javascript umum console.log().

Jadi outputnya terlihat seperti itu:

masukkan deskripsi gambar di sini

(Cuplikan di bawah ini diuji pada php 7.2.11. Saya tidak yakin tentang kompatibilitasnya dengan php. Ini juga bisa menjadi masalah untuk javascript (dalam istilah browser lama), karena ia menciptakan tanda koma setelah console.log()argumen - yang tidak legal sampai 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
sumber
Cuplikan ini menyelamatkan saya. :) Saya perlu membuat beberapa perubahan dalam kode produksi tanpa akses ke server yang sebenarnya, dan ini sempurna untuk menyiasatinya. Terima kasih!
Raphael Aleixo
Saya senang bisa membantu.
HynekS
1

Salah satu dari kedua ini berfungsi:

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

Inilah solusi saya, hal yang baik tentang yang satu ini adalah Anda dapat lulus sebanyak mungkin param.

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

Sebut seperti ini

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

Sekarang Anda seharusnya bisa melihat output di konsol Anda, selamat coding :)

Imran Zahoor
sumber
0

Menggunakan:

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
sumber
1
Anda harus menambahkan petunjuk tentang ide dan solusi Anda. Juga sumbernya memiliki sumber yang tidak digunakan.
bueltge
0

Inilah fungsi yang berguna. Ini super mudah digunakan, memungkinkan Anda untuk meloloskan sebanyak mungkin argumen dari jenis apa pun, dan akan menampilkan konten objek di jendela konsol browser seolah-olah Anda memanggil console.log dari JavaScript - tetapi dari PHP

Catatan, Anda dapat menggunakan tag juga dengan melewati 'TAG-YourTag', dan itu akan diterapkan hingga tag lain dibaca, misalnya, '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>";
            }
        }
    }
}

CATATAN: func_num_args () dan func_num_args () adalah fungsi PHP untuk membaca sejumlah argumen input yang dinamis, dan memungkinkan fungsi ini memiliki banyak permintaan console.log yang tak terhingga dari satu panggilan fungsi.

Chris Sprague
sumber
0

Meskipun ini adalah pertanyaan lama, saya sudah mencari ini. Inilah kompilasi saya dari beberapa solusi yang dijawab di sini dan beberapa ide lain yang ditemukan di tempat lain untuk mendapatkan solusi satu ukuran untuk semua.

Kode:

    // 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');

UJI & PENGGUNAAN:

Penggunaannya sederhana. Sertakan fungsi pertama untuk posting ke konsol secara manual. Gunakan fungsi kedua untuk mengalihkan penanganan pengecualian php. Tes berikut harus memberikan ide.

    // 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');

PENJELASAN:

  • Fungsi console($data, $is_error, $file, $fn)mengambil string atau array sebagai argumen pertama dan mempostingnya di konsol menggunakan sisipan js.

  • Argumen kedua adalah bendera untuk membedakan log normal terhadap kesalahan. Untuk kesalahan, kami menambahkan pendengar acara untuk memberi tahu kami melalui peringatan jika ada kesalahan yang dilemparkan, juga disorot di konsol. Bendera ini defaultnya salah.

  • Argumen ketiga dan keempat adalah deklarasi eksplisit nomor file dan baris, yang opsional. Jika tidak ada, mereka default untuk menggunakan fungsi php yang telah ditentukan debug_backtrace()untuk mengambilnya untuk kita.

  • Fungsi selanjutnya exceptions_to_console($svr, $str, $file, $ln)memiliki empat argumen dalam urutan yang disebut oleh php handler exception exception. Di sini, argumen pertama adalah tingkat permasalahan, yang kami tinjau lebih lanjut dengan konstanta yang telah ditentukan menggunakan fungsi severity_tag($code)untuk memberikan informasi lebih lanjut tentang kesalahan.

MEMPERHATIKAN :

  • Kode di atas menggunakan fungsi dan metode JS yang tidak tersedia di browser lama. Untuk kompatibilitas dengan versi yang lebih lama, perlu diganti.

  • Kode di atas adalah untuk lingkungan pengujian, di mana Anda sendiri memiliki akses ke situs. Jangan gunakan ini di situs web (produksi) langsung.

SARAN :

  • Fungsi pertama console()melemparkan beberapa pemberitahuan, jadi saya membungkusnya dengan fungsi lain dan menyebutnya menggunakan operator kontrol kesalahan '@'. Ini bisa dihindari jika Anda tidak keberatan dengan pemberitahuan itu.

  • Last but not least, peringatan yang muncul bisa mengganggu saat coding. Untuk ini, saya menggunakan bip ini (ditemukan dalam solusi: https://stackoverflow.com/a/23395136/6060602 ) alih-alih peringatan popup. Ini cukup keren dan kemungkinan tidak terbatas, Anda dapat memainkan lagu favorit Anda dan membuat pengkodean menjadi lebih tidak stres.

Ajay Singh
sumber