搜尋
首頁後端開發PHP問題等了這麼久的PHP程式碼拯救者Deliverer,來咯!

當一段程式碼看不到完整的呼叫連結,你是否需要一個工具來輔助明確地查詢到整個完整的呼叫鏈。這次小編帶你了解php中的Deliverer,以後再也不用擔心程式碼排查。

等了這麼久的PHP程式碼拯救者Deliverer,來咯!

前幾日有位群友接手一段祖傳程式碼,排查很久沒有解決,準備提桶跑路,最後幫其解決,完整的過程見https:/ /mengkang.net/1470.html 但最後程式碼的定位我有一些基於個人經驗,實際呼叫的連結和我預期的不一樣,都是靠猜。沒有看到完整的呼叫鏈路,所以我想著需要一個工具來輔助明確地查詢到整個完整的呼叫鏈。

所以搞了這麼個工具,主要是用於一些不熟悉的項目,而且日常環境不好復現的線上場景。

deliverer 祖傳程式碼跑路拯救者https://github.com/zhoumengka...

如果你的專案不是那麼糟糕,日常環境都ok,那麼熟悉一個專案最好的方式還是xdebug,這個工具主要是在排查線上問題。
類似的工具有360 的phptrace 實作原理上稍微有點不同

功能點

  • 可以根據函數名稱、類別名稱、方法名稱、路由來過濾輸出

  • 可以在查詢到指定過濾內容n 次之後退出

  • 可以根據request id 回放細看整個完整的呼叫鏈

  • 過濾的內容會高亮顯示

  • 呼叫堆疊比較深的可以指定-l 來隱藏深度呼叫的展示

原理

其實比較簡單,分兩步,第一步收集日誌,第二步分析日誌。

第一步

在PHP_MINIT階段,透過zend_set_user_opcode_handler 來設定 ZEND_DO_UCALL 、ZEND_DO_FCALL_BY_NAME、ZEND_DO_FCALL 三類 opcode 的處理分析。

注意其中會涵蓋一些內建函數和方法的調用,我們可以透過型別進行過濾。

然後在PHP_RINIT階段新日誌文件,寫入請求的資訊

pid-ts sapi http_method http_url

請求過程中在自訂的handler 裡面列印呼叫堆疊資訊

最後在PHP_RSHUTDOWN關閉日誌文件的寫入

第二步

對收集好的日誌,利用bin/deliverer進行分析和整理,這塊是php 腳本,就不贅述了。

安裝使用

編譯

$ phpize
$ ./configure --with-php-config=/usr/local/php/bin/php-config
$ make && sudo make install

設定php.ini

追加

[deliverer]
extension=deliverer.so

重啟php-fpm

sudo service php-fpm restart

使用分析工具

可以移動./bin/deliverer到你覺得合適的目錄,假如在當前目錄

$ chmod +x deliverer

用一段我自己很久之前的祖傳代碼(我的博客)來跑下

$ ./bin/deliverer -t

這樣會一直監控所有的php 進程的執行

等了這麼久的PHP程式碼拯救者Deliverer,來咯!

$ ./bin/deliverer -tAction::initUser -n3 -l5

等了這麼久的PHP程式碼拯救者Deliverer,來咯!

等了這麼久的PHP程式碼拯救者Deliverer,來咯!

#值 解釋
-t #Action::initUser 過濾包含該呼叫的請求
-n 3 統計三次然後退出
-l # 5 函數(方法)呼叫深度顯示,最多顯示5 層,超出部分在末尾標記
$ ./bin/deliverer -v7979-1624369150991941

透過-v requestId 來詳細查看完整呼叫堆疊

等了這麼久的PHP程式碼拯救者Deliverer,來咯!

$ ./bin/deliverer -tSqlExecute::getAll -n1 -l3

當要查詢方法,函數呼叫堆疊過深,不在層級查詢範圍之內,則其外層呼叫顯示紅色

等了這麼久的PHP程式碼拯救者Deliverer,來咯!

推薦學習:php影片教學

#

以上是等了這麼久的PHP程式碼拯救者Deliverer,來咯!的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:segmentfault。如有侵權,請聯絡admin@php.cn刪除

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具