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

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

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

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

23 ответов


Firefox

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

Chrome

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

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

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

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


или вы используете трюк с этого сайта PHP Debug to console

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

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

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

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


попробуйте это работает :

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

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

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

Xdebug и т. д. имели аналогичные проблемы.

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

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

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


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

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

скриншот результата

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

enter image description here


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

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


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

создает

      <div>

С

    display="none"

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

    console.log()

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


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

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

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

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

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

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

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

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


для Chrome есть расширение под названием Chrome Logger позволяет регистрировать сообщения PHP.

у Firefox DevTools даже есть интегрированная поддержка протокола Chrome Logger.

чтобы включить ведение журнала, вам просто необходимо сохранить 'ChromePhp.php ' file в вашем проекте. Тогда его можно использовать так:

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

пример взят из страница GitHub.

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

Server log within Firefox DevTools


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

  • см. ошибки и исключения в консоли Chrome JavaScript и всплывающих окнах уведомлений.
  • дамп любой переменной типа.
  • выполнить PHP код удаленно.
  • защита доступа паролем.
  • групповые журналы консоли по запросу.
  • перейти к файлу ошибка:строка в текстовом редакторе.
  • копировать ошибка / отладка данных в буфер обмена (для тестировщиков).

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

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

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

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

"Основные Характеристики:

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

" enter image description here


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


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

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


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

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

эта статья объясняет простых шагов

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


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

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


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

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

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

}

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