Як я можу записати на консоль у PHP?


324

Чи можливо написати рядок або увійти в консоль?

Що я маю на увазі

Як і в JSP, якщо ми надрукуємо щось подібне system.out.println("some"), воно буде там на консолі, а не на сторінці.

Відповіді:


145

Firefox

У Firefox ви можете використовувати розширення під назвою FirePHP, яке дозволяє вести журнал та скидання інформації з ваших програм PHP на консоль. Це доповнення до дивовижного розширення веб-розробки Firebug .

Хром

Однак якщо ви використовуєте Chrome, є інструмент налагодження PHP під назвою Chrome Logger або webug (у Webug є проблеми з порядком журналів).

Зовсім недавно Clockwork знаходиться в активному розвитку, який розширює Інструменти для розробників, додаючи нову панель для надання корисної інформації про налагодження та профілювання. Він надає підтримку Laravel 4 і Slim 2 з прямої коробки, а підтримку можна додати через її розширюваний API.

Використання Xdebug

Кращим способом налагодження PHP було б через Xdebug . Більшість браузерів надають допоміжні розширення, які допоможуть вам передати необхідний рядок файлів cookie / запитів для ініціалізації процесу налагодження.


5
Існує також розширення Safari для налагодження PHP під назвою Xdebug Helper. Я встановив його з цієї сторінки: extensions.apple.com/#tab
Марк Маккельві

3
Пожежа PHP посилання мертва
Брайан Лейшман

9
echo "<script> console.log ('PHP:',", get_option ("слайди_даних"), "); </script>";
Азмат Карим Хан

4
ОП заявляє, що він хотів друкувати на стандартний вихід, а не на html / js консоль.
beppe9000

6
FirePHP офіційно мертвий.
TimSparrow

407

Або ви використовуєте фокус від налагодження PHP для консолі .

Для початку вам потрібно трохи помічників PHP

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

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

Тоді ви можете використовувати його так:

debug_to_console("Test");

Це створить такий вихід:

Debug Objects: Test

5
У FireFox v27 він виводить"Debug Objects: " . $data . ""
Mawg каже, що відновити Моніку

Єдиний спосіб зробити це більш корисним - це зробити змінну $ name: 'data' пара в журналі. Хороша функція, хоча.
імператив

10
@Mawg (і люди, які підтримали цей коментар): Якщо $dataвідображається у висновку, функцію ви не ввели точно так, як показано. Подивіться уважно на ваші одиночні та подвійні лапки, щоб переконатися, що вони відповідають коду вище. $data- змінна php; до моменту надсилання сторінки до браузера, ця змінна php буде замінена параметром, переданим до debug_to_console. Веб-переглядач ніколи не повинен бачити $data. (Якщо ви подивитеся на page sourceбраузер, це не повинно говорити $data.)
ToolmakerSteve

1
Дякую за підказку до моєї публікації. Але час і знання змінилися, функція також;) У мене це оновлення зараз.
Бульдж

3
Отже, іншими словами, відповідь така: echo "<script> console.log (" Об'єкти налагодження: ". $ Output." '); </script> ";
Крістін

69

Якщо ви шукаєте простий підхід, відзвучайте як JSON:

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

4
Це додає трохи більше контексту: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

ОП заявляє, що він хотів друкувати на стандартний вихід, а не на html / js консоль.
beppe9000

@ beppe9000 Це неправильно. ОП запитує, чи може він писати з PHP на консоль. Цитата: "Чи можливо написати рядок або увійти в консоль?"
Доусон Ірвін

за допомогою цього ви можете уникнути var_dumps тощо. Відмінно працює, а консоль дозволяє вам гарненько перемикати json.
Mbotet

41

За замовчуванням весь вихід надходить до stdoutHTTP-відповіді чи консолі, залежно від того, чи керується сценарієм Apache або вручну в командному рядку. Але ви можете використовувати error_logдля ведення журналів і до них можна записувати різні потоки вводу / виводуfwrite .


8
Дякую, error_logщо мені потрібно було вивести на термінал із вбудованого веб-сервера PHP
Martín Coll

37

Спробуйте наступне. Це працює:

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

5
Це не дуже в режимі реального часу, оскільки php надсилає всю сторінку після її закінчення. Крім того, якщо в PHP-файлі є помилка, ви навіть не побачите жодного журналу, оскільки він поверне лише сторінку помилки, ігноруючи, таким чином, попередні відбитки.
Miro Markaravanes

1
Я хотів би зазначити, що @MiroMarkaravanes абсолютно правильний - фатальні помилки можуть запобігти виведенню console.log, якщо ви не переконайтеся, що обробляєте / уловлюєте кожну можливу помилку. Особливо, коли використовується вихідна буферизація - якщо ваш буфер не виводить його на екран, не виводиться і ваш console.log. Це щось, про що слід пам’ятати.
whoshotdk

1
ОП заявляє, що він хотів друкувати на стандартний вихід, а не на html / js консоль.
beppe9000

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

Створює a

<div>

з

display="none"

щоб дів не відображався, а

console.log()

Функція створюється в JavaScript. Таким чином, ви отримуєте повідомлення в консолі.


3
Технічно це правильна відповідь на початкове запитання - як записати на консоль браузера з PHP. Але я думаю, що автор намагається налагодити PHP, тому є кращі варіанти. Це не повинно бути зворотним, але, строго кажучи, це правильна відповідь.
Рольф

1
я, звичайно, просто знайшов це неймовірно корисним!
Альберт

Якщо це просто, це рішення є чудовим, оскільки воно само собою пояснює. Особливо, коли у вас є багато жувати одночасно, як я переживаю зараз.
Олу Адабонян

2
Я не розумію, навіщо вам навіть потрібне div. якщо у вас просто є <script>блок, у браузері нічого не відображатиметься.
Кодос Джонсон

1
Крім того, якщо ваше повідомлення про помилку зберігається у змінній, або якщо воно містить лапки, ви добре загорнете це повідомлення у виклик, щоб json.encodeлапки не порушували ваш рядок коду. Наприклад:echo "<script>console.log(".json_encode($msg).")</script>";
SherylHohman

18

Як автор пов’язаної веб-сторінки в популярній відповіді , я хотів би додати свою останню версію цієї простої функції помічника. Це набагато солідніше.

Я використовую, json_encode()щоб перевірити, чи не потрібен тип змінної, а також додати буфер для вирішення проблем з фреймворками. Там немає надійної віддачі або надмірного використання 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);`

Скріншот результату

Також простий приклад як зображення, щоб зрозуміти його набагато простіше:

Введіть тут опис зображення


У той час як я зробити , як цю ідею, ви могли б підтвердити , що він не підходить для Ajax запитів?
Мауг каже, що повернемо Моніку

1
Так, це чистий статичний php, а не Ajax.
буелге

Але, схоже, додається код HML / JS від тіла сторінки - і мій Ajax не повертає жодного тіла сторінки. Вибачте, але я не знаю & thansk за спробу допомогти мені
Мавг каже, що повертаю Моніку

1
Ви повинні запустити функцію помічника, перш ніж вимагати виклику ajax, тоді ви також отримаєте результат у консолі.
буелге

Тому я помістив туди змінну, і кожен персонаж опинився у своєму рядку. Як цікаво, чому це роблять? Ніколи не використовував console.info
ярдапеналтей.com

17

Я думаю, це можна використовувати -

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
Дуже витончений. Дякую @Pankaj Bisht
Vickar

2
Пояснення було б в порядку.
Пітер Мортенсен

14

Деякі чудові відповіді, що додають більше глибини; але мені було потрібно щось простіше і більше, як команда JavaScript console.log().

Я використовую PHP у багатьох "збирання даних і перетворення в XML" в додатках Ajax. JavaScript console.logне працює в цьому випадку; він порушує вихід XML.

У Xdebug тощо були подібні проблеми.

Моє рішення в Windows:

  • Налаштуйте .txtфайл, який можна легко дістати та записати
  • Встановіть error_logзмінну PHP у .iniфайлі для запису в цей файл
  • Відкрийте файл у Провіднику файлів Windows та відкрийте для нього панель попереднього перегляду
  • Використовуйте команду error_log('myTest');PHP для надсилання повідомлень

Це рішення просте і відповідає моїм потребам більшість часу. Стандартний PHP, а панель попереднього перегляду автоматично оновлюється щоразу, коли PHP пише на нього.


Чи json_encodeвирішення проблеми також вирішить проблему? Якщо так, то, можливо, лапки в повідомленні заважають лапкам у сценарії. (наприклад echo "<script>console.log(".json_encode($msg).")</script>";:). Якщо ні, мені цікаво, в чому проблема полягала в тому, що скрипт console.log зламався, і як / чому ваше рішення це виправило. Ваше рішення добре - я просто намагаюся дізнатися більше про умови, які спричинили console.logабо порушили вихід XML. У багатьох випадках журнал помилок, як ви робили, набагато краще, ніж швидкий console.log.
SherylHohman


11

Я вважаю це корисним:

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

І використовувати його так:

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

Які виходи в консолі:

Important
 Less Important
     Even Less Important
Again Important

І ви можете вимкнути менш важливі журнали, обмеживши їх, використовуючи значення $ debug.


Так що якщо ви зателефонуєте, console('Even Less Important' ,6 , $debug);це не відображатиметься на консолі? чому так? щось вище 5 не відображається
HattrickNZ

2
@HattrickNZ Це дозволяє вам мати різні рівні повідомлень журналу. Якщо ви налагоджуєте, ви, можливо, захочете показати дуже чаткий потік повідомлень з великою кількістю інформації, однак під час звичайних операцій ви можете встановити налагодження на 1, щоб отримати лише найважливіші помилки / елементи журналу. Ви самі вирішуєте, які пункти важливі при написанні коду.
Тобі Аллен

ОП заявляє, що він хотів друкувати на стандартний вихід, а не на html / js консоль.
beppe9000

1
Так, але повторний код (надмірність) - повинен бути відновлений: $output = '<script>console.log("' . str_repeat(" ", $priority-1)і . '");</script>';. Тільки implode(",", $data)і $dataрізна.
Пітер Мортенсен

1
@ Петер Мортенсен - правдива історія! Редаговано це протягом 4-х публікацій! :)
zee

7

Короткий і простий для масивів, рядків або об'єктів.

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

1
ОП заявляє, що він хотів надрукувати на серверному терміналі / стандартному виході, а не на консоль 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
}

1
ОП заявляє, що він хотів надрукувати на серверному терміналі / стандартному виході, а не на консоль html / js.
beppe9000

7

Якщо ви хочете записати у файл журналу PHP, а не на консоль JavaScript, ви можете скористатися цим:

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

Довідка: error_log


Тоді просто застрибніть в сш і хвіст колоду
Hayden Thring

6

Для Chrome є розширення під назвою Chrome Logger, що дозволяє реєструвати повідомлення PHP.

Firefox DevTools навіть має інтегровану підтримку протоколу Chrome Logger .

Щоб увімкнути ведення журналу, вам просто потрібно зберегти файл "ChromePhp.php" у своєму проекті. Тоді його можна використовувати так:

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

Приклад взятий зі сторінки GitHub .

Тоді вихід може виглядати приблизно так:

Журнал сервера в Firefox DevTools


Ви також можете встановити його через композитора:"ccampbell/chromephp": "*"
padawanTony

5

Також є чудове розширення Google Chrome, консоль PHP , з бібліотекою PHP, яка дозволяє:

  • Дивіться про помилки та винятки в консолі JavaScript Chrome і в спливаючих вікнах сповіщень.
  • Дамп будь-якого типу змінної.
  • Виконайте PHP-код віддалено.
  • Захистіть доступ паролем.
  • Журнали консолей групи за запитом.
  • Перейти до error file:lineсвого текстового редактора.
  • Скопіюйте дані про помилки / налагодження в буфер обміну (для тестерів).

1
Мій кращий спосіб запису помилок PHP, виняток та визначений користувачем налагодження виводу на консоль JS. Я використовую його протягом багатьох років - дуже надійний і в курсі оновлень PHP. Я б нічого іншого не використовував.
Велоджет

3

Я шукав спосіб налагодження коду у плагіні WordPress, який я розробляв, і натрапив на цю посаду.

Я взяв біти коду, які найбільш застосовні для мене, з інших відповідей і об'єднав їх у функцію, яку я можу використовувати для налагодження WordPress. Функція:

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

Використання полягає в наступному:

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

Якщо ця функція використовується при розробці WordPress, функцію слід розмістити у functions.phpфайлі дочірньої теми, а потім її можна буде викликати в будь-якому місці коду.


2

Я відмовився від усього вищесказаного на користь налагоджувача та реєстратора . Я не можу його досить похвалити!

Просто натисніть на одну з вкладок вгорі праворуч або на "натисніть тут", щоб розгорнути / приховати.

Зауважте різні "категорії". Ви можете натиснути будь-який масив, щоб розгорнути / згорнути його.

З веб-сторінки

Основні риси:

  • Показати глобальні змінні ($ GLOBALS, $ _POST, $ _GET, $ _COOKIE тощо)
  • Показати версію PHP та завантажені розширення
  • Замініть PHP вбудований обробник помилок
  • Журнал запитів SQL
  • Контролюйте код та час виконання SQL запитів
  • Перевірте змінні на предмет змін
  • Функція відстеження викликів
  • Аналіз покриття коду, щоб перевірити, які рядки сценарію, де вони виконані
  • Дамп всіх типів змінної
  • Файл інспектор з виділенням коду для перегляду вихідного коду
  • Надсилайте повідомлення на консоль JavaScript (лише для Chrome) для сценаріїв Ajax

Введіть тут опис зображення


Привіт. Чи є найновіший вилка або подібний інструмент більш сучасний і зараз підтримується?
Метафаніель

Я його не кодував, тож, для новітньої вилки, я думаю, просто перейдіть на GitHub? Про альтернативи зверніться на сторінку softwarerecs.stackexchange.com, і ми допоможемо вам.
Мауг каже, що повернемо Моніку

1
@MawgHi, спасибі Я запитав, тому що phptoolcase Github і перелічені там виделки не оновлювалися протягом 5 років. Дякуємо за інший сайт StackExchange. Я щойно знайшов Clockwork . Цікаво, чи це схоже чи краще ...
Metafaniel

І дякую вам за Clockwork. Це виглядає чудово (шкода, що я не використовую жодної з цих фреймворків (мені цікаво, як це може скинути запити до бази даних - підключивши рамки)). Добре варто вивчити. (+1)
Мауг каже, що повернути Моніку

2

Станом на 2017 рік Firebug та, отже, FirePHP були відключені .

Я написав кілька невеликих модифікацій інструменту ChromePHP, щоб дозволити безперешкодну міграцію з FirePHP в Firebug для налагодження через консоль.

Ця стаття пояснює чіткими простими кроками

Перехід від FirePHP до ChromePHP за 5 хвилин (без порушення існуючого коду)


2

Для викликів Ajax або відповідей XML / JSON, де ви не хочете возитися з тілом, вам потрібно надіслати журнали через заголовки HTTP, а потім додати їх до консолі з веб-розширенням. Ось як FirePHP (більше не доступний) та QuantumPHP (виделка ChromePHP) роблять це у Firefox.

Якщо у вас є терпіння, x-debug - кращий варіант - ви глибше розумієте PHP, маючи змогу призупинити сценарій, побачити, що відбувається, та відновіть сценарій.



2

Я можу запізнитися на вечірку, але я шукав реалізацію функції реєстрації, яка:

  • приймає змінну кількість аргументів, розділених комами, як і javascript console.log(),
  • дає відформатований вихід (не лише серіалізований рядок),
  • відрізняється від загального JavaScript console.log().

Отже, результат виглядає так:

введіть тут опис зображення

(Фрагмент, наведений нижче, тестований на php 7.2.11. Я не впевнений у його сумісності із зворотною підтримкою php. Це може бути проблемою і для javascript (у терміні старих браузерів), оскільки він створює трейлінг після коми після console.log()аргументів - чого немає законний до 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

1

Будь-який із цих двох працює:

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

Ось моє рішення, добре в цьому є те, що ви можете передавати стільки парам, скільки вам подобається.

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

Назвіть це так

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

Тепер ви маєте змогу бачити вихід у вашій консолі із задоволенням від кодування :)


0

Використання:

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
Вам слід додати підказку про свою ідею та рішення. Також у джерела є невикористане джерело.
Бульдж

0

Ось зручна функція. Це дуже просто у використанні, дозволяє передавати скільки завгодно аргументів будь-якого типу, а також відображатиме вміст об'єкта у вікні консолі браузера так, ніби ви викликали console.log з JavaScript - але з PHP

Зауважте, ви можете також використовувати теги, передаючи "TAG-YourTag", і він застосовуватиметься, поки не буде прочитаний інший тег, наприклад, "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>";
            }
        }
    }
}

ПРИМІТКА: func_num_args () та func_num_args () - це функції PHP для зчитування динамічної кількості вхідних аргументів, і дозволяють цій функції мати нескінченно багато запитів console.log від одного виклику функції.


0

Хоча це старе питання, я шукав це. Ось моя компіляція деяких рішень, відповіла тут, і деякі інші ідеї, знайдені в інших місцях, щоб отримати рішення одного розміру.

КОД:

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

ТЕСТИ ТА ВИКОРИСТАННЯ:

Використання просте. Включіть першу функцію для розміщення в консолі вручну. Використовуйте другу функцію для переадресації обробки винятків php. Наступний тест повинен дати уявлення.

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

ПОЯСНЕННЯ:

  • Функція console($data, $is_error, $file, $fn)приймає рядок або масив як перший аргумент і розміщує його на консолі, використовуючи js вставки.

  • Другий аргумент - прапор для розмежування нормальних журналів від помилок. Щодо помилок, ми додаємо слухачів подій, щоб повідомляти нас за допомогою сповіщень про те, що помилки були викинуті, також виділяючи в консолі. Цей прапор має значення false.

  • Третій та четвертий аргументи - це явні декларації номерів файлів та рядків, що є необов’язковим. Якщо вони відсутні, вони за замовчуванням використовують заздалегідь задану функцію php, debug_backtrace()щоб отримати їх для нас.

  • Наступна функція exceptions_to_console($svr, $str, $file, $ln)має чотири аргументи в порядку, викликаному обробником виключень php за замовчуванням. Тут перший аргумент - суворість, яку ми надалі перехрещуємо з попередньо визначеними константами, використовуючи функцію, severity_tag($code)щоб надати більше інформації про помилку.

УВАГА:

  • Вищевказаний код використовує функції та методи JS, які недоступні у старих браузерах. Для сумісності зі старими версіями йому потрібні заміни.

  • Вищевикладений код призначений для тестування середовищ, де ви один маєте доступ до сайту. Не використовуйте це на веб-сайтах, що живуть (на виробництві).

ПРЕДЛОЖЕННЯ:

  • Перша функція console()кинула деякі повідомлення, тож я обернув їх у іншій функції та назвав її за допомогою оператора управління помилками "@". Цього можна уникнути, якщо ви не проти сповіщень.

  • І останнє, але не менш важливе, спливаючі сигнали можуть дратувати під час кодування. Для цього я використовую цей звуковий сигнал (знайдений у рішенні: https://stackoverflow.com/a/23395136/6060602 ) замість спливаючих повідомлень. Це досить круто і можливостей нескінченно, ви можете грати улюблені мелодії і робити кодування менш напруженим.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.