經常因為出現緊急bug而被老板罵的同事,為了更快的修復而直接利用線上的錯誤環境現場debug,並直接在頁面上echo和dump。結果被老板發現了,又是一通臭罵。那么有沒有什么辦法更優雅的輸出PHP調試信息呢?
這里提供一個方案:利用瀏覽器調試模式的Console
1,先定義一個php函數:
1 function console($log='') 2 { 3 switch (empty($log)) { 4 case False: 5 $out = json_encode($log); 6 $GLOBALS['console'] .= 'console.log('.$out.');'; 7 break; 8 9 default: 10 echo '<script type="text/javascript">'.$GLOBALS['console'].'</script>'; 11 } 12 }
2,在需要調試的地方直接調用它,遞交的參數可以是字符串,也可以是數組。
3,在適當的位置調用無參數的console,用來輸出調試信息,比如各類php框架入口文件的最底部
4,打開瀏覽器(比如chrome),載入頁面后進入調試模式(比如按F12鍵),點擊Console,你會發現所有數據都在這里等着你查閱。
5,其他用途
優秀的PHP開源框架ThinkPHP提供了輸出運行狀態的功能,你可以通過運行狀態來了解某個頁面在后台處理了多長時間。但是,很多人都注意到了,它是不准確的。
下面我們試着用剛剛加進來的自定義函數console在瀏覽器中輸出真正的運行時間。
所有工作都在入口文件中完成:
在所有代碼的最開頭,定義變量$s=microtime(true);
在console();的上面再增加console('exetime:'.round(microtime(true)-$s,4));
好了,我們來看看真正的運行時間吧:
這個課題就這么簡單愉快的解決了。
PS:因為這個函數用到了json來輸出數組,所以要求編碼為UTF-8,如果使用其它編碼可能會出現未知問題,需要留意。