Как я могу написать на консоль в PHP?

190

Возможно ли записать строку или войти в консоль?

Что я имею в виду

Как и в jsp, если мы печатаем что-то вроде system.out.println("some"), оно будет на консоли не на странице.

Теги:
printing
console
debugging

22 ответа

115
Лучший ответ

Firefox

В Firefox вы можете использовать расширение, называемое FirePHP, которое позволяет регистрировать и выгружать информацию из ваших приложений PHP на консоль. Это дополнение к удивительному расширению веб-разработки Firebug.

Chrome

Однако, если вы используете Chrome, есть инструмент отладки PHP под названием webug или Chrome Logger.

Совсем недавно Clockwork находится в активной разработке, которая расширяет инструменты разработчика, добавляя новую панель для предоставления полезной информации для отладки и профилирования. Он предоставляет из коробки поддержку Laravel 4 и Slim 2 и поддержка может быть добавлена ​​через расширяемый API.

Использование Xdebug

Лучшим способом отладки вашего PHP будет Xdebug. Большинство браузеров предоставляют вспомогательные расширения, которые помогут вам передать требуемую строку cookie/query для инициализации процесса отладки.

  • 0
    это хороший FirePHP
  • 7
    Существует также ChromePHP для Chrome: chromephp.com
Показать ещё 8 комментариев
211

Или вы используете трюк с этого сайта Отладка 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 . ""
  • 0
    Единственный способ сделать это более полезным - сделать пару переменных $ name: 'data' в журнале. Хорошая функция, хотя.
Показать ещё 11 комментариев
43

Если вы ищете простой подход, эхо как JSON:

<script>
    console.log(<?= json_encode($foo); ?>);
</script>
  • 2
    Это добавляет немного больше контекста: 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>"; }
  • 0
    ОП заявляет, что он хотел печатать в стандартный вывод, а не в консоль html / js.
Показать ещё 1 комментарий
28

По умолчанию весь вывод идет на stdout, который является ответом HTTP или консолью, в зависимости от того, выполняется ли ваш script Apache или вручную в командной строке. Но вы можете использовать error_log для ведения журнала и различные потоки ввода-вывода можно записать с помощью fwrite.

19

Попробуйте это, он работает:

echo("<script>console.log('PHP: ".$data."');</script>");
  • 3
    Это не очень реальное время, так как php отправляет всю страницу после завершения обработки. Более того, если в php-файле есть ошибка, вы не увидите ни одного из журналов, потому что он вернет только страницу с ошибкой, игнорируя ваши предыдущие отпечатки.
  • 0
    Ну, это работает для меня .. +1
Показать ещё 2 комментария
12

Некоторые большие ответы, которые добавляют больше глубины; но мне было нужно что-то более простое и более похожее на команду JS console.log().

Я использую PHP во множестве "сбора данных и превращения в xml" в приложение AJAX. JS console.log не работает в этом случае; он прерывает вывод xml. (Может быть, у кого-то есть решение для этого?)

Xdebug и т.д. имели схожие проблемы.

Мое решение в Windows:

  • Установите файл .txt, который можно легко получить и записать
  • Задайте переменную PHP error_log в файле .ini для записи в этот файл
  • Откройте файл в проводнике Windows и откройте панель предварительного просмотра.
  • Используйте команду error_log('myTest'); PHP для отправки сообщений

Это решение прост, отвечает моим потребностям в большинстве случаев, стандартным PHP, а панель предварительного просмотра автоматически обновляется каждый раз, когда PHP пишет на нее.

10

Как автор связанной веб-страницы в популярном ответе выше, я хотел бы добавить свою последнюю версию этой простой вспомогательной функции, гораздо более прочную.

Я использую json_encode(), чтобы проверить тип var не обязательно и добавить также буфер для решения проблем с фреймворками, там нет твердого возврата или чрезмерного использования 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 var, object; here an array.
$data = [ 'foo' => 'bar' ];
debug_to_console( $data );`

Снимок экрана результата

Также простой пример как изображение для понимания намного проще.

Изображение 797

  • 0
    Хотя я , как эта идея, вы могли бы подтвердить , что он не подходит для Ajax запросов?
  • 1
    Да, это чистый статический php, а не Ajax.
Показать ещё 7 комментариев
10

Я нахожу это полезным:

function console($data, $priority, $debug)
{
    if ($priority <= $debug)
    {
        if (is_array($data))
            $output = '<script>console.log("' . str_repeat(" ", $priority-1) . implode( ",", $data) . '");</script>';
        else
            $output = '<script>console.log("' . str_repeat(" ", $priority-1) . $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 value

  • 0
    так что если вы вызываете console('Even Less Important' ,6 , $debug); это не будет отображаться в консоли? почему так? что-то выше 5 не отображается
  • 1
    @HattrickNZ Это позволяет вам иметь разные уровни сообщений журнала. Если вы отлаживаете, вы можете захотеть показать очень болтливый поток сообщений с большим количеством информации, однако во время обычной работы вы можете установить отладку на 1, чтобы отображались только самые важные ошибки / элементы журнала. Вам решать, какие элементы важны при написании кода.
Показать ещё 3 комментария
6
function phpconsole($label='var',$x){
 ?>
 <script type="text/javascript">
    console.log('<?php echo ($label)?>');
    console.log('<?php echo json_encode($x)?>');
    </script>
 <?php
}
  • 0
    ОП заявляет, что он хотел печатать на серверный терминал / стандартный вывод, а не на консоль html / js.
5

Короткий и простой, для массивов, строк или объектов.

function console_log( $data ) {
  $output  = "<script>console.log( 'PHP debugger: ";
  $output .= json_encode(print_r($data, true));
  $output .= "' );</script>";
  echo $output;
}
  • 0
    ОП заявляет, что он хотел печатать на серверный терминал / стандартный вывод, а не на консоль html / js.
4

В 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.

Результат может выглядеть следующим образом:

Изображение 798

  • 0
    Вы также можете установить его через композитор: "ccampbell/chromephp": "*"
  • 0
    это хорошо и, кажется, законный путь, спасибо.
4

Если вы хотите записать файл журнала PHP, а не консоль JavaScript, вы можете использовать это:

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

Ссылка: http://php.net/manual/en/function.error-log.php

  • 0
    Тогда просто прыгайте в SSH и следите за журналом
4

Я думаю, что он может быть использован -

function jsLogs($data) {
       $html = "";

       if(is_array($data) || is_object($data)) {
            $html = "<script>console.log('PHP: ".json_encode($data)."');</script>";
        } else {
            $html = "<script>console.log('PHP: ".$data."');</script>";
        }

        echo($html);
       # exit();
 }

jsLogs(array("test1", "test2")); # PHP: ["test1","test2"]
jsLogs(array("test1"=>array("subtest1", "subtest2"))); #PHP: {"test1":["subtest1","subtest2"]}
jsLogs("testing string"); #PHP: testing string
  • 3
    Очень сложный. Спасибо @Pankaj Бишт
2

Я отказался от всего вышеперечисленного в пользу http://phptoolcase.com/guides/ptc-debug-guide.html Я не могу хвалить его достаточно!

Просто нажмите на одну из вкладок вверху справа или на "нажмите здесь", чтобы развернуть/скрыть.

Обратите внимание на разные "категории". Вы можете щелкнуть любой массив, чтобы развернуть/сшить его.

С веб-страницы

"Основные возможности:

Show globals vars ($GLOBALS, $_POST, $_GET, $_COOKIE ...)
Show php version and loaded extensions
Replace php built in error handler
Log sql queries
Monitor code and sql queries execution time
Inspect variables for changes
Function calls tracing
Code coverage analysis to check which lines of script where executed
Dump of all types of variable
File inspector with code highlighter to view source code
Send messages to js console(Chrome only), for ajax scripts

" Изображение 799

  • 0
    Привет. Существует ли новейшая вилка или аналогичный инструмент, более современный и поддерживаемый в настоящее время?
  • 0
    Я не кодировал его, так что для новейшего форка, я думаю, просто перейти на GitHub? По поводу альтернатив обращайтесь по адресу softwarerecs.stackexchange.com, и мы вам поможем.
Показать ещё 2 комментария
2

Существует также отличное расширение Google Chrome Консоль PHP с php library, который позволяет:

  • См. ошибки и исключения в консоли Chrome JavaScript и всплывающих окнах уведомлений.
  • Дамп любой переменной типа.
  • Удаленное выполнение кода PHP.
  • Защита доступа по паролю.
  • Журналы групповой консоли по запросу.
  • Перейти к файлу ошибки: строка в текстовом редакторе.
  • Копировать ошибки/отладочные данные в буфер обмена (для тестеров).
  • 1
    Мой предпочтительный метод записи ошибок PHP, исключений и пользовательских отладочных выходных данных в консоль JS. Я использовал его в течение многих лет - очень надежный и постоянно обновляющийся с ревизиями PHP. Я бы не использовал ничего другого.
0

Для вызовов Ajax или ответов xml/json, где вы не хотите связываться с телом, вам нужно отправить журналы через HTTP-заголовки, а затем добавить их в консоль с расширением веб-сайта. Вот как FirePHP и QuantumPHP (вилка ChromePHP) делают это в Firefox.

Если у вас есть терпение, x-debug - лучший вариант - вы получите более глубокое понимание PHP, с возможностью приостановить ваш script, посмотреть, что происходит, а затем возобновить script.

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

Создает

      <div>

с

    display="none"

чтобы div не отображался, но

    console.log()
Функция

создается в javascript. Таким образом, вы получаете сообщение в консоли.

  • 2
    Технически это правильный ответ на первоначальный вопрос - как написать в консоль браузера из PHP. Но я думаю, что автор пытается отладить PHP, поэтому есть лучшие варианты. Это не должно быть опущено, хотя, строго говоря, это правильный ответ.
  • 1
    я конечно только нашел это невероятно полезным!
Показать ещё 2 комментария
0
$variable = "Variable";
echo "<script>console.log('$variable');</script>";

Взаимодействие PHP и Javascript.

0

Начиная с 2017 года, firebug и, следовательно, firephp были отключены.

Я написал несколько небольших изменений в инструменте chromephp, чтобы обеспечить плавный переход от firephp к firebug для отладки через консоль.

В этой статье объясняются четкие простые шаги

https://medium.com/@kudehinbuoluwaponle/migrate-from-firephp-to-chromephp-in-5-minutes-without-breaking-existing-code-e4afd1b28c5c

0

Отличная почта, спасибо, я искал способ отладки кода в плагине 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 дочерней темы и затем может быть вызвана где угодно в коде.

0

Любой из этих двух работает:

<?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>");
?>
0
function console_log( $data ) {
    $bt = debug_backtrace();
    $caller = array_shift($bt);

    if ( is_array( $data ) )
        error_log( end(split('/',$caller['file'])) . ':' . $caller['line'] . ' => ' . implode( ',', $data) );
    else
        error_log( end(split('/',$caller['file'])) . ':' . $caller['line'] . ' => ' . $data );

}
  • 0
    Вы должны добавить подсказку о вашей идее и решении. Также источник имеет неиспользованный источник.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню