有時候,我拿到一個很陌生的程式,想觀察程式執行時,某些變數的變化。
但觀察的過程,又不想輸出在畫面上,因為輸出在畫面上時,可能讓畫面跑版,
若是輸出在 AJAX 的 response,也可能讓原本解析 AJAX response 的 JavaScript 產生錯誤。
所以,當我不想影響原本程式的輸出,只想默默觀察變數的值時,我都會用 error_log() 將變數內容輸出到其它檔案。尤其同一流程需要連續操作多次,再一併觀察數值的變化時,這個方法也蠻方便的。
程式碼如下:
使用時,先在 php 檔案新增以下程式碼,並於該目錄下建立 debug_log 資料夾,用來存放輸出結果。
if(1){ // 不使用時,改成 if(0) $log_dir = dirname(__FILE__) . '/debug_log'; // 存放 erro_log 輸出結果的目錄 $log_file = $log_dir . "/" . date("Y-m-d") . ".txt"; // 存放 erro_log 輸出結果的 txt 檔 if (!file_exists($log_file)) { $fp_log = fopen($log_file, "w"); chmod($log_file, 0777); fclose($fp_log); } ini_set('error_log', $log_file); ini_set('log_errors', 1); } // 將變數使用 var_dump 輸出 function lstr($v){ ob_start(); var_dump($v); $str = ob_get_clean(); return $str; }
使用時
$myVar = "test"; $myArray = array("a", "b", "c"); error_log($myVar); error_log(lstr($myArray)); // 如果變數是array,用自訂的 lstr() 函式輸出,避免只輸出"Array"字串
輸出結果 debug_log/2014-02-27.txt
[27-Feb-2014 03:36:12] test [27-Feb-2014 03:36:12] array(3) { [0]=> string(1) "a" [1]=> string(1) "b" [2]=> string(1) "c" }
沒有留言:
張貼留言