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