通過(guò)chrome瀏覽器控制臺(tái)(Console)進(jìn)行PHP Debug的方法
效果如下圖

PHP Console是一款可以幫助用戶模擬真實(shí)的PHP網(wǎng)站運(yùn)行環(huán)境,幫助用戶使用Chrome插件對(duì)PHP代碼進(jìn)行調(diào)試的Chrome插件,用戶在Chrome中安裝了PHP Console插件以后,可以在自己的PHP項(xiàng)目中引用PHP Console項(xiàng)目代碼,并輸出調(diào)試信息,讓PHP Console插件進(jìn)行捕獲,這樣在網(wǎng)站發(fā)布成功以后,還可以使用PHP Console插件進(jìn)行輸出調(diào)試信息到Chrome瀏覽器中,用戶可以通過(guò)PHP Console插件來(lái)查看這些來(lái)自于PHP服務(wù)器發(fā)來(lái)的調(diào)試日志。
當(dāng)我們的PHP程序Debug時(shí),比較常用的方式是將變量的信息打印到瀏覽器中,例如這樣:
<?php echo '<pre>'; print_r($bar); echo '</pre>'; exit;
可是直接打印出來(lái)有可能會(huì)干擾你的頁(yè)面,打亂布局,影響作為Api返回的數(shù)據(jù)等問(wèn)題。這時(shí)我們可以采取將調(diào)試信息輸出到文件的方式,如下是最簡(jiǎn)單的例子:
error_log(print_r($bar, true));
可是這種方式用來(lái)記錄日志還合適,用到調(diào)試時(shí)終究還是不太方便。此時(shí)我們可以利用現(xiàn)代瀏覽器的控制臺(tái),比如Chrome Console(Win快捷鍵 Ctrl+Shift+J),將內(nèi)容輸出到Console里,就可以解決這個(gè)問(wèn)題了。
現(xiàn)在已經(jīng)有一些這樣的工具了,比如說(shuō) PHP-Console 或者Chrome Logger ,前者針對(duì)PHP,后者支持多種服務(wù)端語(yǔ)言,使用方式都是先安裝一個(gè)Chrome擴(kuò)展,然后提供服務(wù)端的庫(kù)供調(diào)用。實(shí)現(xiàn)方式大致是利用Session,Cookies等來(lái)傳遞數(shù)據(jù)。
如上是比較完善的解決方式,都提供了豐富的功能。但如果只是想要一個(gè)簡(jiǎn)單的,可用的,不用安裝擴(kuò)展程序的方式來(lái)解決這個(gè)問(wèn)題,那么可以這么來(lái)做:
<?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>");
}
}
其實(shí)質(zhì)上就是在頁(yè)面里加入了一段javascript的腳本,利用 console.log() 函數(shù)輸出信息到控制臺(tái),如上方法打印出來(lái)都是字符串形式,如果將單引號(hào)去掉,PHP的數(shù)組和對(duì)象將以JS對(duì)象的方式打印出來(lái),即echo("<script>console.log(".json_encode($data).");</script>");,究竟使用哪一種看你喜歡的方式了。
如上就是最簡(jiǎn)單的實(shí)現(xiàn)方式了,但這么做有一點(diǎn)不太好,就是輸出的很凌亂,如果你在不同的位置都調(diào)用了該函數(shù),那么在頁(yè)面的各個(gè)位置都將插入一段<script>,雖說(shuō)JS在頁(yè)面幾乎任何位置都可以,但我們可以有更好的辦法,將所有數(shù)據(jù)統(tǒng)一到一處輸出:
<?php
//注冊(cè)一個(gè)shutdown函數(shù),如果不這么做的話記得在程序最后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;
}
}
注意如上使用<?=來(lái)代替<?php echo ,需要在php.ini中開啟Short_open_tag=On。這段代碼就是利用php的輸出控制緩沖函數(shù)來(lái)將數(shù)據(jù)保存下來(lái),最后一次全部輸出。
相關(guān)文章
PHP中集成PayPal標(biāo)準(zhǔn)支付的實(shí)現(xiàn)方法分享
前兩天一個(gè)客戶需要在網(wǎng)站上集成PayPal支付功能,查了一下資料,簡(jiǎn)單記錄如下2012-02-02
PHP判斷遠(yuǎn)程圖片或文件是否存在的實(shí)現(xiàn)代碼
本篇文章主要是對(duì)PHP判斷遠(yuǎn)程圖片或文件是否存在的實(shí)現(xiàn)代碼進(jìn)行了介紹,需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助2014-02-02
PHP簡(jiǎn)單實(shí)現(xiàn)多維數(shù)組合并與排序功能示例
這篇文章主要介紹了PHP簡(jiǎn)單實(shí)現(xiàn)多維數(shù)組合并與排序功能,涉及php數(shù)組合并、排序等相關(guān)操作及array_merge、array_multisort等函數(shù)使用技巧,需要的朋友可以參考下2017-09-09
解析阿里云ubuntu12.04環(huán)境下配置Apache+PHP+PHPmyadmin+MYsql
本篇文章是對(duì)在阿里云ubuntu12.04環(huán)境下配置Apache+PHP+PHPmyadmin+MYsql的具體操作流程進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06
PHP實(shí)現(xiàn)限制IP訪問(wèn)的方法
這篇文章主要介紹了PHP實(shí)現(xiàn)限制IP訪問(wèn)的方法,涉及php針對(duì)客戶端IP的獲取、解析、遍歷、判斷等相關(guān)操作技巧,需要的朋友可以參考下2017-04-04
php Sql Server連接失敗問(wèn)題及解決辦法
本人在鏈接sql2005的時(shí)候遇到的問(wèn)題,經(jīng)過(guò)仔細(xì)排查和搜索找到解決辦法,希望對(duì)大家有用。2009-08-08

