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

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

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

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

Ответ 1

Firefox

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

Chrome

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

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

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

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

Ответ 2

Или вы используете трюк из PHP Debug для консоли.

Для начала вам понадобится небольшая вспомогательная функция 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

Ответ 3

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

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

Ответ 4

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

Ответ 5

Попробуйте следующее. Это работает:

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

Ответ 6

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

Создает

<div>

с помощью

display="none"

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

console.log()

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

Ответ 7

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

Я использую 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;
}

Usage

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

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

Также простой пример в виде изображения, чтобы понять его гораздо проще:

Enter image description here

Ответ 8

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

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

Ответ 9

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

Я использую PHP во многих "сбора данных и превращения в XML" в приложениях Ajax. JavaScript console.log не работает в этом случае; это нарушает вывод XML.

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

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

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

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

Ответ 10

Я считаю это полезным:

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.

Ответ 11

$variable = "Variable";
echo "<script>console.log('$variable');</script>";

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

Ответ 12

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

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

Ответ 13

function phpconsole($label='var', $x) {
    ?>
    <script type="text/javascript">
        console.log('<?php echo ($label)?>');
        console.log('<?php echo json_encode($x)?>');
    </script>
    <?php
}

Ответ 14

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

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

Ссылка: error_log

Ответ 15

Существует также отличное расширение Google Chrome, PHP Console, с библиотекой PHP, которое позволяет:

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

Ответ 16

Для 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.

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

Server log within Firefox DevTools

Ответ 17

Я отказался от всего вышеперечисленного в пользу Debugger & Logger. Я не могу похвалить это достаточно!

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

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

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

Main features:

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

Enter image description here

Ответ 18

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

Ответ 19

С 2017 года Firebug и, следовательно, FirePHP отключены.

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

Эта статья объясняет простым и понятным образом

Миграция с FirePHP на ChromePHP за 5 минут (без нарушения существующего кода)

Ответ 20

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

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

Ответ 21

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

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

Ответ 22

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

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

Ответ 23

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