PHP'de konsola nasıl yazabilirim?


324

Konsola bir dize veya günlük yazmak mümkün mü?

Demek istedigim

Tıpkı JSP'de olduğu gibi system.out.println("some"), böyle bir şey yazdırırsak , bir sayfada değil, konsolda olacaktır.

Yanıtlar:


145

Firefox

Firefox'ta PHP uygulamalarınızdan konsola bilgilerin kaydedilmesini ve dökülmesini sağlayan FirePHP adlı bir uzantı kullanabilirsiniz . Bu harika web geliştirme uzantısı Firebug bir eklenti .

Krom

Ancak Chrome kullanıyorsanız Chrome Logger veya webug adlı bir PHP hata ayıklama aracı vardır (webug günlüklerin sırası ile ilgili sorunlara sahiptir).

Daha yakın zamanda Clockwork , yararlı hata ayıklama ve profil oluşturma bilgileri sağlamak için yeni bir panel ekleyerek Geliştirici Araçlarını genişleten aktif bir geliştirme sürecindedir. Laravel 4 ve Slim 2 için kutudan çıkar çıkmaz destek sağlar ve genişletilebilir API'si ile destek eklenebilir.

Xdebug kullanma

PHP hata ayıklamak için daha iyi bir yol Xdebug aracılığıyla olacaktır . Çoğu tarayıcı, hata ayıklama işlemini başlatmak için gerekli çerez / sorgu dizesini geçmenize yardımcı olacak yardımcı uzantılar sağlar.


5
PHP hata ayıklaması için Xdebug Helper adlı bir Safari uzantısı da var. Bu sayfadan yükledim: extensions.apple.com/#tab
Mark Mckelvie

3
Fire PHP bağlantısı öldü
Brian Leishman

9
echo "<script> console.log ('PHP:',", get_option ("slides_data"), "); </script>";
Azmat Karim Khan

4
OP, html / js konsoluna değil, standart çıktıya yazdırmak istediğini belirtir.
beppe9000

6
FirePHP resmen öldü.
Tim 9

407

Veya PHP hata ayıklama hile konsol için kullanın .

Önce küçük bir PHP yardımcı fonksiyonuna ihtiyacınız var

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

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

O zaman bu şekilde kullanabilirsiniz:

debug_to_console("Test");

Bu, şöyle bir çıktı oluşturur:

Debug Objects: Test

5
FireFox v27'de çıktı"Debug Objects: " . $data . ""
Mawg diyor Monica

Bunu daha kullanışlı hale getirmenin tek yolu, günlükte değişken bir $ name: 'data' çifti yapmak olacaktır. Güzel işlevi olsa.
Emir

10
@Mawg (ve bu yorumu iptal eden kişiler): Çıktıda $datagörünürse, işlevi tam olarak gösterildiği gibi yazmadınız . Yukarıdaki kodla eşleştiğinden emin olmak için tek ve çift tırnaklarınıza dikkatlice bakın. $databir php değişkenidir; sayfa tarayıcıya gönderildiğinde, bu php değişkeni yerine geçirilen parametre ile değiştirilir debug_to_console. Tarayıcı asla görmemelidir $data. ( page sourceTarayıcıya bakarsanız, söylememelisiniz $data.)
ToolmakerSteve

1
Yazımın ipucu için teşekkürler. Ama zaman ve bilgi değişti, fonksiyon da;) Şimdi güncelledim.
18'de 09

3
Başka bir deyişle, cevap şudur: echo "<script> console.log ('Nesneleri Hata Ayıkla:". $ Output. "'); </script>";
Christine

69

Basit bir yaklaşım arıyorsanız, JSON olarak yankılanın:

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

4
Bu biraz daha bağlam ekler: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, html / js konsoluna değil, standart çıktıya yazdırmak istediğini belirtir.
beppe9000

@ beppe9000 Bu yanlış. OP PHP'den konsola yazıp yazamayacağını sorar. Alıntı: "Konsola yazı yazmak veya oturum açmak mümkün mü?"
Dawson Irvine

bununla var_dumps ve benzerlerinden kaçınabilirsiniz. Harika çalışıyor ve konsol json'u güzel bir şekilde değiştirmenizi sağlar.
19'da Mbotet


37

Takip etmeyi dene. Çalışıyor:

echo("<script>console.log('PHP: " . $data . "');</script>");

5
Bu çok gerçek bir zaman değil, çünkü php işlendikten sonra tüm sayfayı gönderir. Ayrıca, php dosyasında bir hata varsa, günlükleri bile göremezsiniz, çünkü yalnızca bir hata sayfası döndürür, böylece önceki baskılarınızı yok sayar.
Miro Markaravanes

1
@MiroMarkaravanes'ın kesinlikle doğru olduğunu belirtmek isterim - ölümcül hatalar, olası her hatayı işlemeye / yakalamaya dikkat etmedikçe console.log'un çıkmasını engelleyebilir. Özellikle çıktı arabelleğe alma kullanılırken - arabelleğiniz bunu ekrana getirmezse, console.log çıktısı da yapmaz. Dikkat edilmesi gereken bir şey.
whoshotdk

1
OP, html / js konsoluna değil, standart çıktıya yazdırmak istediğini belirtir.
beppe9000

19
echo 
"<div display='none'>
    <script type='text/javascript'>
        console.log('console log message');
    </script>
</div>";

Oluşturur

<div>

ile

display="none"

böylece div görüntülenmez, ancak

console.log()

işlevi javascript'te oluşturulur. Böylece mesajı konsoldan alırsınız.


3
Teknik olarak bu ilk soruya doğru cevaptır - PHP'den tarayıcı konsoluna nasıl yazılır. Ama yazar daha iyi seçenekler var bu yüzden PHP hata ayıklama çalışıyor düşünüyorum. Yine de düşürülmemelidir, kesinlikle bu doğru bir cevaptır.
Rolf

1
kesinlikle sadece inanılmaz yararlı buldum!
albert

Basit tutmak, bu çözüm harika çünkü kendini açıklayıcı. Özellikle de şu an yaşadığım kadar çiğnemek için çok şeyiniz olduğunda.
Olu Adabonyan

2
Neden ihtiyacın olduğunu anlamıyorum div. sadece bir <script>bloğunuz varsa , tarayıcıda hiçbir şey görüntülenmez.
Kodos Johnson

1
Ayrıca, hata iletiniz bir değişkende saklanıyorsa veya tırnak işaretleri içeriyorsa, tırnak işaretlerinin json.encodekod satırınızı kırmaması için iletiyi bir çağrıya sarmanız iyi olur . Örneğin:echo "<script>console.log(".json_encode($msg).")</script>";
SherylHohman

18

Popüler yanıtta bağlantılı web sayfasının yazarı olarak, bu basit yardımcı işlevinin son sürümünü eklemek istiyorum. Çok daha sağlam.

Kullandığım json_encode()değişken türü değil gerekirse bir çek yapmak ve aynı zamanda çerçeveler ile ilgili sorunları çözmek için bir tampon eklemek için. Katı bir geri dönüşü veya aşırı kullanımı yoktur 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;
}

kullanım

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

Sonucun ekran görüntüsü

Ayrıca daha kolay anlamak için bir görüntü olarak basit bir örnek:

Resim açıklamasını buraya girin


Ben iken yapmak bu fikir gibi, bunu Ajax istekleri için uygun olmaz teyit edebilir?
Mawg, Monica

1
Evet, saf statik php, Ajax değil.
bueltge

Ancak, bir sayfa gövdesi için HML / JS kodu ekliyor gibi görünüyor - ve Ajax'ım sayfa gövdesi döndürmüyor. Üzgünüm, ama bana yardım etmeye çalıştığım için ttsk & thansk yapmıyorum
Mawg Monica

1
Ajax çağrısını istemeden önce yardımcı işlevi tetiklemelisiniz, ardından konsolda da bir sonuç alırsınız.
bueltge

Buraya bir değişken koydum ve her Karakter kendi satırında sona erdi. Neden bunu yaptığını merak ediyor musun? Asla Kullanılmış console.info
yardpenalty.com

17

Bence kullanılabilir -

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

3
Çok sofistike biri. Thanks @Pankaj Bisht
Vickar

2
Bir açıklama yapılabilir.
Peter Mortensen

14

Daha fazla derinlik katan bazı harika cevaplar; ancak JavaScript console.log()komutuna benzer daha basit ve daha fazlasına ihtiyacım vardı .

Ben Ajax uygulamalarda "veri toplama ve XML dönüştürmek" bir sürü PHP kullanın. JavaScript console.logbu durumda çalışmaz; XML çıktısını keser.

Xdebug, vb. Benzer sorunları vardı.

Windows'taki çözümüm:

  • .txtKolayca ulaşılabilen ve yazılabilir bir dosya oluşturun
  • Dosyadaki PHP error_logdeğişkenini bu .inidosyaya yazacak şekilde ayarlama
  • Dosyayı Windows Dosya Gezgini'nde açın ve dosya için bir önizleme bölmesi açın
  • error_log('myTest');İleti göndermek için PHP komutunu kullanma

Bu çözüm basittir ve çoğu zaman ihtiyaçlarımı karşılar. Standart PHP ve önizleme bölmesi PHP her yazdığında otomatik olarak güncellenir.


İletiyi sarmak json_encodeda sorunu çözer mi? Öyleyse, iletideki tırnak işaretleri komut dosyasındaki tırnak işaretleriyle çakışabilir. (örneğin:) echo "<script>console.log(".json_encode($msg).")</script>";. Değilse, console.log komut dosyasının bozulmasına neden olan sorunun ne olduğunu ve çözümünüzün bunu nasıl / neden düzelttiğini merak ediyorum. Çözümünüz iyi - Ben sadece neden console.logveya xml çıktı kırılmasına neden olan koşullar hakkında daha fazla bilgi edinmek çalışıyorum . Çoğu durumda, yaptığınız gibi bir hata günlüğü hızlı bir işlemden çok daha iyidir console.log.
SherylHohman


11

Bunu faydalı buluyorum:

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

Ve şöyle kullanın:

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

Konsolda hangi çıkışlar:

Important
 Less Important
     Even Less Important
Again Important

Ve daha az önemli günlükleri $ debug değerini kullanarak sınırlandırarak kapatabilirsiniz.


Peki console('Even Less Important' ,6 , $debug);bu ararsanız konsolda görüntülenmez? neden öyle? 5 üzerinde hiçbir şey görüntülenmez
HattrickNZ

2
@HattrickNZ Bu, farklı düzeylerde günlük iletileri almanızı sağlamak içindir. Hata ayıklama yapıyorsanız, çok fazla bilgi içeren çok konuşkan bir mesaj akışı göstermek isteyebilirsiniz, ancak normal işlemler sırasında hata ayıklamayı 1 olarak ayarlayabilirsiniz, böylece görüntülenen en önemli hataları / günlük öğelerini alabilirsiniz. Kodu yazarken hangi öğelerin önemli olduğuna karar vermek size kalmış.
Toby Allen

OP, html / js konsoluna değil, standart çıktıya yazdırmak istediğini belirtir.
beppe9000

1
Evet, ancak tekrarlanan kod (artıklık) - yeniden hesaplanmalıdır: $output = '<script>console.log("' . str_repeat(" ", $priority-1)ve . '");</script>';. Sadece implode(",", $data)ve $datafarklı.
Peter Mortensen

1
@Peter Mortensen - gerçek hikaye! Bunu 4 yaşın üzerinde düzenledi! :)
zee

7

Kısa ve kolay, diziler, dizeler veya nesneler için.

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

1
OP, html / js konsoluna değil, sunucu tarafı terminale / standart çıkışa yazdırmak istediğini belirtir.
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
}

1
OP, html / js konsoluna değil, sunucu tarafı terminale / standart çıkışa yazdırmak istediğini belirtir.
beppe9000

7

JavaScript konsoluna değil, PHP günlük dosyasına yazmak istiyorsanız bunu kullanabilirsiniz:

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

Referans: error_log


Sonra sadece ssh atlamak ve günlük kuyruk
Hayden Thring

6

Chrome için PHP günlüklerini kaydetmeye izin veren Chrome Logger adlı bir uzantı var .

Firefox DevTools , Chrome Logger protokolü için entegre desteğe bile sahiptir .

Günlüğe kaydetmeyi etkinleştirmek için 'ChromePhp.php' dosyasını projenize kaydetmeniz yeterlidir . Sonra şu şekilde kullanılabilir:

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

GitHub sayfasından alınan örnek .

Çıktı daha sonra şöyle görünebilir:

Firefox DevTools içindeki sunucu günlüğü


Ayrıca besteci ile de kurabilirsiniz:"ccampbell/chromephp": "*"
padawanTony

5

Ayrıca aşağıdakileri yapmanızı sağlayan bir PHP kütüphanesine sahip harika bir Google Chrome uzantısı olan PHP Konsolu da vardır:

  • Hataları ve istisnaları Chrome JavaScript konsolunda ve bildirim açılır pencerelerinde görün.
  • Her tür değişkeni boşaltın.
  • PHP kodunu uzaktan yürütün.
  • Erişimi şifre ile koruyun.
  • Konsol günlüklerini istek üzerine gruplayın.
  • error file:lineMetin düzenleyicinize atlayın .
  • Hata / hata ayıklama verilerini panoya kopyala (test kullanıcıları için).

1
PHP konsoluna PHP hataları, istisna ve kullanıcı tanımlı hata ayıklama çıktısı yazmayı tercih ettiğim yöntem. Ben yıllardır kullanıyorum - son derece güvenilir ve PHP revizyonları ile güncel tutulur. Başka bir şey kullanmam.
Velojet

3

Geliştirdiğim ve bu yazıyla karşılaştığım bir WordPress eklentisinde kodda hata ayıklamanın bir yolunu arıyordum.

Diğer yanıtlardan benim için en uygun olan kod parçalarını aldım ve bunları WordPress hata ayıklaması için kullanabileceğim bir işleve birleştirdim. İşlev:

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

Kullanımı aşağıdaki gibidir:

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

Bu işlev WordPress geliştirmesiyle birlikte kullanılırsa, işlev functions.phpalt temanın dosyasına yerleştirilmeli ve kodun herhangi bir yerine çağrılabilir.


2

Yukarıdakilerin hepsini Debugger & Logger lehine terk ettim . Yeterince övemem!

Sağ üstteki sekmelerden birini veya genişletmek / gizlemek için "burayı tıklayın" ı tıklamanız yeterlidir.

Farklı "kategorilere" dikkat edin. Genişletmek / daraltmak için herhangi bir diziyi tıklatabilirsiniz.

Web sayfasından

Ana Özellikler:

  • Global değişkenleri göster ($ GLOBALS, $ _POST, $ _GET, $ _COOKIE vb.)
  • PHP sürümünü ve yüklü uzantıları göster
  • Yerleşik PHP hata işleyicisini değiştirin
  • SQL sorgularını günlüğe kaydet
  • Kod ve SQL sorgularının yürütme süresini izleyin
  • Değişkenleri değişikliklere karşı inceleyin
  • İşlev çağrıları izleme
  • Hangi kod satırlarının yürütüldüğünü kontrol etmek için kod kapsamı analizi
  • Tüm değişken türlerinin dökümü
  • Kaynak kodunu görüntülemek için kod vurgulayıcılı dosya denetçisi
  • Ajax komut dosyaları için JavaScript konsoluna mesaj gönderme (yalnızca Chrome)

Resim açıklamasını buraya girin


Selam. Daha güncel ve şu anda bakımı yapılan en yeni çatal veya benzeri bir alet var mı?
Metafaniel

Kod yazmadım, bu yüzden en yeni çatal için, sanırım GitHub'a mı gidiyorsun? Alternatifler için softwarerecs.stackexchange.com adresine sorun, size yardımcı olacağız.
Mawg, Monica'yı

1
@MawgHi, teşekkürler. Ben sordum çünkü phptoolcase Github ve orada listelenen çatallar 5 yıl içinde güncellenmedi. Diğer StackExchange sitesi için teşekkürler. Clockwork'u yeni buldum . Benzer mi yoksa daha iyi mi merak ediyorum ...
Metafaniel

Ve Clockwork için teşekkür ederim . Mükemmel görünüyor (sadece bu çerçevelerden herhangi birini kullanmıyorum üzücü (Bu nasıl veritabanı sorguları dökümü olabilir - çerçeveyi çengel) merak ediyorum). Araştırmaya değer. (+1)
Mawg, Monica'yı


2

Gövdeyle uğraşmak istemediğiniz Ajax çağrıları veya XML / JSON yanıtları için, günlükleri HTTP üstbilgileri aracılığıyla göndermeniz ve ardından bunları web uzantısıyla konsola eklemeniz gerekir. Firefox'ta FirePHP (artık mevcut değil) ve QuantumPHP (bir ChromePHP çatalı) bunu yapıyor.

Sabrınız varsa, x-debug daha iyi bir seçenektir - betiğinizi duraklatma, neler olup bittiğini görme ve betiği devam ettirme yeteneği ile PHP hakkında daha derin bir fikir edinirsiniz.



2

Bir partiye geç kalabilirim, ancak günlükleme işlevinin uygulanmasını arıyordum:

  • javascript gibi değişken sayıda virgülle ayrılmış bağımsız değişken alır console.log(),
  • biçimlendirilmiş bir çıktı verir (yalnızca serileştirilmiş bir dize değil),
  • ortak bir javascript'ten ayırt edilebilir console.log().

Böylece çıktı şöyle görünür:

resim açıklamasını buraya girin

(Aşağıdaki snippet php üzerinde test edilmiştir 7.2.11. Onun php geriye dönük uyumluluğundan emin değilim. Bu console.log()argümanlar sonra bir virgül oluşturur - çünkü, javascript için de bir sorun olabilir (eski tarayıcıların bir terim) kadar yasal 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);

?>

Bu pasaj beni kurtardı. :) Gerçek sunuculara erişim olmadan üretim kodunda bazı değişiklikler yapmam gerekiyordu ve bu onu aşmak için mükemmeldi. Teşekkürler!
Raphael Aleixo

Yardım edebildiğim için memnunum.
HynekS

1

Bu ikisinden biri çalışıyor:

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

İşte benim çözümüm, bununla ilgili iyi olan şey, istediğiniz kadar param geçirebilmeniz.

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

Bu şekilde ara

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

Artık konsolunuzdaki çıktıyı görebilmelisiniz, mutlu kodlama :)


0

kullanın:

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

1
Fikriniz ve çözümünüz hakkında bir ipucu eklemelisiniz. Ayrıca kaynakta kullanılmayan kaynak var.
18'te bueltge

0

İşte kullanışlı bir işlev. Kullanımı son derece basittir, istediğiniz türde ve istediğiniz sayıda argüman iletmenize olanak tanır ve nesne içeriğini tarayıcı konsolu penceresinde JavaScript'ten - ama PHP'den çağırdığınız gibi görüntüleyecektir.

Etiketleri, 'TAG-YourTag' ileterek de kullanabilirsiniz; etiket başka bir etiket okunana kadar uygulanacaktır, örneğin, '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>";
            }
        }
    }
}

NOT: func_num_args () ve func_num_args () , dinamik sayıda giriş bağımsız değişkenini okumak için kullanılan PHP işlevleridir ve bu işlevin bir işlev çağrısından sonsuz sayıda console.log isteğine sahip olmasını sağlar.


0

Bu eski bir soru olmasına rağmen, bunu arıyordum. Burada yanıtlanan bazı çözümleri ve başka bir yerde herkese uyan tek bir çözümü elde etmek için bulduğum bazı fikirleri derlemem.

KOD:

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

TESTLER VE KULLANIM:

Kullanımı basit. Konsola manuel olarak göndermek için ilk işlevi dahil edin. Php kural dışı durum işleme yönlendirme için ikinci işlevi kullanın. Aşağıdaki test bir fikir vermelidir.

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

AÇIKLAMA:

  • İşlev console($data, $is_error, $file, $fn), dize veya diziyi ilk bağımsız değişken olarak alır ve js eklerini kullanarak konsola gönderir.

  • İkinci argüman, normal günlükleri hatalara göre ayıran bir işarettir. Hatalar için, herhangi bir hata atıldığında bizi uyarılar aracılığıyla bilgilendirmek için olay dinleyicileri ekliyoruz, ayrıca konsolda da vurgulanıyor. Bu bayrak varsayılan olarak false değerine ayarlanmıştır.

  • Üçüncü ve dördüncü argümanlar, isteğe bağlı olan dosya ve satır numaralarının açık beyanlarıdır. Eğer yoksa, debug_backtrace()onları bizim için getirmek için önceden tanımlanmış php işlevini kullanacak şekilde varsayılan olarak kullanılırlar .

  • Sonraki işlevin exceptions_to_console($svr, $str, $file, $ln)php varsayılan özel durum işleyicisi tarafından çağrılan sırada dört bağımsız değişkeni vardır. Burada, ilk argüman, severity_tag($code)hata hakkında daha fazla bilgi sağlamak için işlevi kullanarak önceden tanımlanmış sabitlerle daha fazla kontrol ettiğimiz ciddiyettir .

FARKINA VARMAK :

  • Yukarıdaki kod, eski tarayıcılarda bulunmayan JS işlevlerini ve yöntemlerini kullanır. Eski sürümlerle uyumluluk için değiştirilmesi gerekir.

  • Yukarıdaki kod, yalnızca siteye erişiminizin olduğu ortamları test etmek içindir. Bunu canlı (prodüksiyon) web sitelerinde kullanmayın.

ÖNERİLER :

  • İlk fonksiyon console()bazı bildirimler attı, bu yüzden onları başka bir fonksiyona sardım ve hata kontrol operatörü '@' kullanarak çağırdım. Bildirimleri dikkate almadıysanız bu önlenebilir.

  • Son fakat aynı derecede önemli olarak, uyarılar açılırken kodlama sırasında can sıkıcı olabilir. Bunun için pop-up uyarıları yerine bu bip sesini kullanıyorum (çözümde bulundu: https://stackoverflow.com/a/23395136/6060602 ). Oldukça havalı ve olasılıklar sonsuz, en sevdiğiniz şarkıları çalabilir ve kodlamayı daha az stresli hale getirebilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.