十年網(wǎng)站開發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營(yíng)維護(hù)+專業(yè)推廣+無(wú)憂售后,網(wǎng)站問題一站解決
PHP 確實(shí)不會(huì)輸出錯(cuò)誤堆棧,但通過函數(shù),還是能夠獲取到錯(cuò)誤堆棧的。
創(chuàng)新互聯(lián)公司專注于加格達(dá)奇網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠(chéng)為您提供加格達(dá)奇營(yíng)銷型網(wǎng)站建設(shè),加格達(dá)奇網(wǎng)站制作、加格達(dá)奇網(wǎng)頁(yè)設(shè)計(jì)、加格達(dá)奇網(wǎng)站官網(wǎng)定制、小程序設(shè)計(jì)服務(wù),打造加格達(dá)奇網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供加格達(dá)奇網(wǎng)站排名全網(wǎng)營(yíng)銷落地服務(wù)。
function getBacktrace() {
ob_start();
debug_print_backtrace();
return ob_get_clean();
}
調(diào)用上面這個(gè)函數(shù)取得錯(cuò)誤堆棧,再用 file_put_contents('log_path', FILE_APPEND); 寫入日志文件即可。
還有一個(gè)辦法:為 PHP 安裝 xdebug 擴(kuò)展
windows 下的安裝方法 安裝好后,修改 php.ini
你可能是新的環(huán)境,你按我的方法試一下,在你的程序外面再建一個(gè)目錄,然后重新綁定一下程序就可能了,這是權(quán)限問題
基于以上原因,今天我們就來講一講在 PHP 項(xiàng)目當(dāng)中,怎樣快速得到 PHP 調(diào)用棧。
PHP 調(diào)用棧,顧名思義就是從我們 Web 訪問項(xiàng)目的時(shí)候,PHP 從執(zhí)行開始到返回給我們結(jié)果的這一系列操作的 PHP 類/方法等調(diào)用的過程。
一、利用 XDebug 擴(kuò)展的 xdebug_get_function_stack() 函數(shù)
對(duì) XDebug 擴(kuò)展了解的同學(xué),可以知道 XDebug 的功能主要用于代碼調(diào)試。其中,XDebug 就提供了一個(gè)非常有用的函數(shù):xdebug_get_function_stack()。
從這個(gè)函數(shù)的的名字我們可以知道它就是獲取方法調(diào)用棧的。
我們只需要在項(xiàng)目當(dāng)中放到 PHP 腳本當(dāng)中,只要這個(gè)方法被執(zhí)行到。那么,這個(gè)方法就能打印 PHP 腳本從開始到執(zhí)行到這個(gè)位置的所有調(diào)用棧。從而就能解決我們對(duì)代碼執(zhí)行流程不清晰的問題。
這個(gè)方法會(huì)返回一個(gè)數(shù)組。數(shù)據(jù)里面包含了執(zhí)行的腳本文件路徑、類名、方法名、參數(shù)等信息。
注:該方法生成的調(diào)用棧信息相對(duì)比較粗糙。對(duì)于簡(jiǎn)單初淺調(diào)試完成夠用了。同時(shí),要使用這個(gè)方法,必須安裝 XDebug 擴(kuò)展。PHP 安裝 XDebug 擴(kuò)展的教程網(wǎng)上很多。這里不贅述。
二、利用 phptrace 擴(kuò)展查看
phptrace 是一個(gè)追蹤(trace)PHP 執(zhí)行流程的工具。這是奇虎 360 團(tuán)隊(duì)開源的一款 PHP 擴(kuò)展工具。它本身的功能之一就是查看 PHP 調(diào)用棧。所以,推薦指數(shù) 5 顆星。
項(xiàng)目開源地址:
安裝擴(kuò)展:
$ wget
$ tar zxvf trace-1.0.1beta.tgz
$ cd trace-1.0.1beta/extension
$ {php_bin_dir}/phpize
$ ./configure --with-php-config={php_bin_dir}/php-config
$ make
$ make cli
$ make install-all
然后在 php.ini 配置文件末尾增加:
extension=trace.so
重啟我們的 PHP-FPM。
為了能在命令行使用 phptrace 提供的命令,我們還需要在剛剛的 exten