1、利用js打印到浏览器控制台
<?php
function console_log($data)
{
if (is_array($data) || is_object($data))
{
echo("<script>console.log('".json_encode($data)."');</script>");
}
else
{
echo("<script>console.log('".$data."');</script>");
}
}
其实质上就是在页面里加入了一段javascript的脚本,利用 console.log() 函数输出信息到控制台,如上方法打印出来都是字符串形式,如果将单引号去掉,PHP的数组和对象将以JS对象的方式打印出来,即echo("<script>console.log(".json_encode($data).");</script>");,究竟使用哪一种看你喜欢的方式了。
//注册一个shutdown函数,如果不这么做的话记得在程序最后echo Console_log::fetch_output();
register_shutdown_function('my_shutdown');
function my_shutdown()
{
echo Console_log::fetch_output();
}
class Console_log {
private static $output = '';
static function log($data)
{
if (is_array($data) || is_object($data))
{
$data = json_encode($data);
}
ob_start();
?>
<?php if (self::$output === ''):?>
<script>
<?php endif;?>
console.log('<?=$data;?>');
<?php
self::$output .= ob_get_contents();
ob_end_clean();
}
static function fetch_output()
{
if (self::$output !== '')
{
self::$output .= '</script>';
}
return self::$output;
}
}
Console_log::log(array(1,2));
echo '111111';
Console_log::log('test');
<?php
function console_log($data)
{
if (is_array($data) || is_object($data))
{
echo("<script>console.log('".json_encode($data)."');</script>");
}
else
{
echo("<script>console.log('".$data."');</script>");
}
}
其实质上就是在页面里加入了一段javascript的脚本,利用 console.log() 函数输出信息到控制台,如上方法打印出来都是字符串形式,如果将单引号去掉,PHP的数组和对象将以JS对象的方式打印出来,即echo("<script>console.log(".json_encode($data).");</script>");,究竟使用哪一种看你喜欢的方式了。
如上就是最简单的实现方式了,但这么做有一点不太好,就是输出的很凌乱,如果你在不同的位置都调用了该函数,那么在页面的各个位置都将插入一段<script>,虽说JS在页面几乎任何位置都可以,但我们可以有更好的办法,将所有数据统一到一处输出:
<?php//注册一个shutdown函数,如果不这么做的话记得在程序最后echo Console_log::fetch_output();
register_shutdown_function('my_shutdown');
function my_shutdown()
{
echo Console_log::fetch_output();
}
class Console_log {
private static $output = '';
static function log($data)
{
if (is_array($data) || is_object($data))
{
$data = json_encode($data);
}
ob_start();
?>
<?php if (self::$output === ''):?>
<script>
<?php endif;?>
console.log('<?=$data;?>');
<?php
self::$output .= ob_get_contents();
ob_end_clean();
}
static function fetch_output()
{
if (self::$output !== '')
{
self::$output .= '</script>';
}
return self::$output;
}
}
Console_log::log(array(1,2));
echo '111111';
Console_log::log('test');
2、利用页头信息输出调试数据
<?php
function console_log($data)
{
if (is_array($data) || is_object($data))
{
echo("<script>console.log('".json_encode($data)."');</script>");
}
else
{
echo("<script>console.log('".$data."');</script>");
}
}
function callback($buffer)
{
// replace all the apples with oranges
//header("debug_data: ".json_encode('1=2'));
//return (str_replace("1=2", "", $buffer));
$regex4="/<div class=\"warn\".*?>(.*?)<\/div>/ism";
if(preg_match_all($regex4, $buffer, $matches)){
$ret = str_replace($matches[0][0], "", $buffer);
header("debug_data: ".json_encode($matches[1][0]));
$debug_data = json_encode($matches[1][0]);
}else{
$ret = $buffer;
}
return $ret;
}
register_shutdown_function('my_shutdown');
function my_shutdown()
{
console_log('debug');
}
ob_start("callback");
?>
<html>
<body>
<?php $title = "1111"; ?>
<div class="warn" style="display:block">$title=<?php echo $title;?></div>
<p>It's like comparing apples to oranges.</p>
</body>
</html>
<?php
function console_log($data)
{
if (is_array($data) || is_object($data))
{
echo("<script>console.log('".json_encode($data)."');</script>");
}
else
{
echo("<script>console.log('".$data."');</script>");
}
}
function callback($buffer)
{
// replace all the apples with oranges
//header("debug_data: ".json_encode('1=2'));
//return (str_replace("1=2", "", $buffer));
$regex4="/<div class=\"warn\".*?>(.*?)<\/div>/ism";
if(preg_match_all($regex4, $buffer, $matches)){
$ret = str_replace($matches[0][0], "", $buffer);
header("debug_data: ".json_encode($matches[1][0]));
$debug_data = json_encode($matches[1][0]);
}else{
$ret = $buffer;
}
return $ret;
}
register_shutdown_function('my_shutdown');
function my_shutdown()
{
console_log('debug');
}
ob_start("callback");
?>
<html>
<body>
<?php $title = "1111"; ?>
<div class="warn" style="display:block">$title=<?php echo $title;?></div>
<p>It's like comparing apples to oranges.</p>
</body>
</html>
3、 firebug+firephp+FirePHP库调试PHP原理
FirePHP工具通过将调试信息输出到http响应头,然后firephp插件分析响应头字符串输出相应调试信息
FirePHP工具通过将调试信息输出到http响应头,然后firephp插件分析响应头字符串输出相应调试信息
4、修改http请求头,后台根据$_SERVER['HTTP_TEST_HEADER_NAME']设置判断处理是否开启调试模式,结合方法3 if (isset($_SERVER['HTTP_TEST_HEADER_NAME']) && $_SERVER['HTTP_TEST_HEADER_NAME'] == 'test-header-value'){
$firephp
->setEnabled(true); }