分析 PHP 指令碼

Subodh Poudel 2022年6月15日
分析 PHP 指令碼

本文將引導你完成使用 Xdebug 分析 PHP 指令碼的過程。

使用 Xdebug 在 PHP 中分析指令碼

Xdebug 是一種流行的 PHP 工具,用於除錯和分析 PHP 指令碼。分析指令碼意味著分析程式碼以確保其得到優化並具有高階別的效能。

分析將提供有關程式的 CPU、記憶體和網路利用率的資訊。下面的部分將演示如何設定分析環境並分析 PHP 中的示例指令碼。

安裝 Xdebug 工具

第一步是下載 Xdebug 工具。首先,使用以下命令更新你的系統。

sudo apt-get update

更新本地包後,在終端使用以下命令安裝 Xdebug 工具。

sudo apt-get install php-xdebug

接下來,導航路徑 /etc/php/8.1/mods-available/xdebug.ini 並開啟 xdebug.ini 檔案。這裡,8.1 是教程中使用的系統的 PHP 版本。

它可能因使用者而異。在 xdebug.ini 檔案中新增以下行。

zend_extension=/usr/lib/php/20210902/xdebug.so
xdebug.remote_autostart = 1
xdebug.remote_enable = 1
xdebug.remote_handler = dbgp
xdebug.remote_host = 127.0.0.1
xdebug.remote_log = /tmp/xdebug_remote.log
xdebug.remote_mode = req
xdebug.remote_port = 9005

此處,zend_extension 屬性值的路徑/usr/lib/php/20210902/xdebug.so 中的目錄 20210902 可能因系統而異。導航到路徑並使用正確的目錄名稱作為 zend_extension 屬性的值。

接下來,如果 Web 伺服器是 Apache,則使用以下命令重新啟動 Web 伺服器。

sudo systemctl restart apache2
sudo /etc/init.d/apache2 restart

對於 nginx,使用以下命令。

sudo systemctl restart nginx

最後,xdebug 安裝在系統中。

配置 php.ini 以使用 Xdebug

我們可以通過檢視 phpinfo() 函式的輸出來驗證 PHP 中 Xdebug 的安裝。但是,該工具尚未準備好使用。

我們需要在 php.ini 檔案中配置它。為此,導航到 php.ini 檔案並使用文字編輯器開啟它。

我們可以在 phpinfo() 輸出中找到檔案的路徑。在當前系統中,該檔案位於路徑 /etc/php/8.1/apache2/php.ini

php.ini 檔案中,在檔案末尾新增以下行。

[xdebug]
zend_extension=/usr/lib/php/20210902/xdebug.so
xdebug.show_local_vars=1

使用系統中使用的目錄重新命名目錄 20210902。接下來,將 display_errorsdisplay_startup_errors 屬性設定為 On 並儲存檔案。

再次重新啟動 Web 伺服器。現在,Xdebug 已經可以使用了。

分析 PHP 指令碼

最後一步是分析 PHP 指令碼。我們需要編寫一些 PHP 程式碼來分析它。

例如,建立四個變數 $a$b$c$d。在 $a$b 中分配整數值 5 和字串值'5'

同樣,在 $c$d 中分配陣列 array(5)array('5')

接下來,使用 var_dump() 函式轉儲所有四個變數。最後,再次轉儲變數 $v

請注意,我們沒有建立任何名為 $v 的變數。

示例程式碼:

$a=5;
$b='5';
$c=array(5);
$d=array('5');

var_dump($a);
var_dump($b);
var_dump($c);
var_dump($d);

var_dump($v);

輸出:

分析 PHP 指令碼

在輸出部分,對 PHP 指令碼進行了概要分析。程式碼的錯誤部分被突出顯示。

它顯示了諸如呼叫堆疊之類的資訊,其中提供了有關時間、記憶體、功能和位置的資訊。同樣,也給出了區域性範圍內的變數資訊。

這樣,我們就可以使用 Xdebug 來分析 PHP 指令碼了。

作者: Subodh Poudel
Subodh Poudel avatar Subodh Poudel avatar

Subodh is a proactive software engineer, specialized in fintech industry and a writer who loves to express his software development learnings and set of skills through blogs and articles.

LinkedIn