分析 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