Возможно ли записать строку или войти в консоль?
Как и в jsp, если мы печатаем что-то вроде system.out.println("some")
, оно будет на консоли не на странице.
Firefox
В Firefox вы можете использовать расширение, называемое FirePHP, которое позволяет регистрировать и выгружать информацию из ваших приложений PHP на консоль. Это дополнение к удивительному расширению веб-разработки Firebug.
Chrome
Однако, если вы используете Chrome, есть инструмент отладки PHP под названием webug или Chrome Logger.
Совсем недавно Clockwork находится в активной разработке, которая расширяет инструменты разработчика, добавляя новую панель для предоставления полезной информации для отладки и профилирования. Он предоставляет из коробки поддержку Laravel 4 и Slim 2 и поддержка может быть добавлена через расширяемый API.
Использование Xdebug
Лучшим способом отладки вашего PHP будет Xdebug. Большинство браузеров предоставляют вспомогательные расширения, которые помогут вам передать требуемую строку cookie/query для инициализации процесса отладки.
Или вы используете трюк с этого сайта Отладка 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
"Debug Objects: " . $data . ""
Если вы ищете простой подход, эхо как JSON:
<script>
console.log(<?= json_encode($foo); ?>);
</script>
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>"; }
По умолчанию весь вывод идет на stdout
, который является ответом HTTP или консолью, в зависимости от того, выполняется ли ваш script Apache или вручную в командной строке. Но вы можете использовать error_log
для ведения журнала и различные потоки ввода-вывода можно записать с помощью fwrite
.
error_log
- это то, что мне нужно для вывода на терминал со встроенного веб-сервера PHP
Попробуйте это, он работает:
echo("<script>console.log('PHP: ".$data."');</script>");
Некоторые большие ответы, которые добавляют больше глубины; но мне было нужно что-то более простое и более похожее на команду JS console.log()
.
Я использую PHP во множестве "сбора данных и превращения в xml" в приложение AJAX. JS console.log
не работает в этом случае; он прерывает вывод xml. (Может быть, у кого-то есть решение для этого?)
Xdebug и т.д. имели схожие проблемы.
Мое решение в Windows:
.txt
, который можно легко получить и записатьerror_log
в файле .ini
для записи в этот файлerror_log('myTest');
PHP для отправки сообщенийЭто решение прост, отвечает моим потребностям в большинстве случаев, стандартным PHP, а панель предварительного просмотра автоматически обновляется каждый раз, когда PHP пишет на нее.
Как автор связанной веб-страницы в популярном ответе выше, я хотел бы добавить свою последнюю версию этой простой вспомогательной функции, гораздо более прочную.
Я использую 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 );`
Также простой пример как изображение для понимания намного проще.
Я нахожу это полезным:
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
console('Even Less Important' ,6 , $debug);
это не будет отображаться в консоли? почему так? что-то выше 5 не отображается
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;
}
В 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.
Результат может выглядеть следующим образом:
"ccampbell/chromephp": "*"
Если вы хотите записать файл журнала PHP, а не консоль JavaScript, вы можете использовать это:
error_log ( "This is logged only to the PHP log" )
Я думаю, что он может быть использован -
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
Я отказался от всего вышеперечисленного в пользу 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
"
Существует также отличное расширение Google Chrome Консоль PHP с php library, который позволяет:
Для вызовов Ajax или ответов xml/json, где вы не хотите связываться с телом, вам нужно отправить журналы через HTTP-заголовки, а затем добавить их в консоль с расширением веб-сайта. Вот как FirePHP и QuantumPHP (вилка ChromePHP) делают это в Firefox.
Если у вас есть терпение, x-debug - лучший вариант - вы получите более глубокое понимание PHP, с возможностью приостановить ваш script, посмотреть, что происходит, а затем возобновить script.
echo "<div display='none'><script type='text/javascript'>console.log('console log message')</script></div>";
Создает
<div>
с
display="none"
чтобы div не отображался, но
console.log()
Функция создается в javascript. Таким образом, вы получаете сообщение в консоли.
$variable = "Variable";
echo "<script>console.log('$variable');</script>";
Взаимодействие PHP и Javascript.
Начиная с 2017 года, firebug и, следовательно, firephp были отключены.
Я написал несколько небольших изменений в инструменте chromephp, чтобы обеспечить плавный переход от firephp к firebug для отладки через консоль.
В этой статье объясняются четкие простые шаги
Отличная почта, спасибо, я искал способ отладки кода в плагине 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 дочерней темы и затем может быть вызвана где угодно в коде.
Любой из этих двух работает:
<?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 );
}