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.
Apakah mungkin menulis string atau masuk ke konsol?
Sama seperti di JSP, jika kita mencetak sesuatu seperti system.out.println("some")
, itu akan ada di konsol, bukan di halaman.
Jawaban:
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.
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
"Debug Objects: " . $data . ""
$data
muncul 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. $data
adalah 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 source
di browser, seharusnya tidak dikatakan $data
.)
Jika Anda mencari pendekatan sederhana, gema sebagai JSON:
<script>
console.log(<?= json_encode($foo); ?>);
</script>
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>"; }
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_log
untuk mencatat dan berbagai aliran I / O dapat digunakan untuk menulis fwrite
.
error_log
adalah apa yang saya butuhkan untuk output ke terminal dari server web
Coba yang berikut ini. Ini bekerja:
echo("<script>console.log('PHP: " . $data . "');</script>");
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.
div
. jika Anda hanya memiliki <script>
blok, tidak ada yang ditampilkan di browser.
json.encode
sehingga tanda kutip tidak merusak baris kode Anda. Sebagai contoh:echo "<script>console.log(".json_encode($msg).")</script>";
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;
}
// $data is the example variable, object; here an array.
$data = [ 'foo' => 'bar' ];
debug_to_console($data);`
Juga contoh sederhana sebagai gambar untuk memahaminya lebih mudah:
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"]}
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.log
tidak berfungsi dalam hal ini; itu merusak output XML.
Xdebug, dll. Memiliki masalah serupa.
Solusi saya di Windows:
.txt
file yang agak mudah untuk diakses dan dituliserror_log
variabel PHP di.ini
file untuk menulis ke file ituerror_log('myTest');
perintah PHP untuk mengirim pesanSolusi ini sederhana dan memenuhi sebagian besar kebutuhan saya. PHP standar, dan panel pratinjau secara otomatis memperbarui setiap kali PHP menulisnya.
json_encode
juga 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.log
atau output xml rusak. Dalam banyak kasus, log kesalahan seperti yang Anda lakukan jauh lebih baik daripada cepat console.log
.
$variable = "Variable";
echo "<script>console.log('$variable');</script>";
Interaksi PHP dan JavaScript.
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.
console('Even Less Important' ,6 , $debug);
ini tidak akan ditampilkan di konsol? kenapa begitu? adalah apa pun di atas 5 tidak ditampilkan
$output = '<script>console.log("' . str_repeat(" ", $priority-1)
dan . '");</script>';
. Hanya implode(",", $data)
dan $data
berbeda.
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;
}
function phpconsole($label='var', $x) {
?>
<script type="text/javascript">
console.log('<?php echo ($label)?>');
console.log('<?php echo json_encode($x)?>');
</script>
<?php
}
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
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:
"ccampbell/chromephp": "*"
Ada juga ekstensi Google Chrome, PHP Console , dengan perpustakaan PHP yang memungkinkan Anda untuk:
error file:line
dalam editor teks Anda.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.php
file tema anak dan kemudian dapat dipanggil di mana saja dalam kode.
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
Pada 2017, Firebug dan karenanya FirePHP telah dinonaktifkan .
Saya menulis beberapa modifikasi kecil pada alat ChromePHP untuk memungkinkan migrasi yang mulus dari FirePHP ke Firebug untuk debugging melalui konsol.
Artikel ini menjelaskan dalam langkah-langkah mudah yang jelas
Bermigrasi dari FirePHP ke ChromePHP dalam 5 menit (tanpa melanggar kode yang ada)
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.
Saya mungkin terlambat menghadiri pesta, tetapi saya mencari implementasi fungsi logging yang:
console.log()
,console.log()
.Jadi outputnya terlihat seperti itu:
(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);
?>
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 :)
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));
}
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.
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.