PhpStorm是一个轻量级且便捷的PHP IDE,其提供的智能代码补全,快速导航以及即时错误检查等功能大大提高了编码效率。它以其独特的开发便利性,短时间内赢得了大量PHPer的青睐。
Xdebug是一个开放源代码的PHP程序调试器(即一个Debug工具),可以用来跟踪,调试和分析PHP程序的运行状况。你可以通过调试器进行前后端交互式地调试脚本。
PhpStorm作为一款强大的IDE,debug功能自然不在话下。
下面给大家说说这两个工具如何搭配起来进行php断点调试。
整个流程大致如下:
- 下载并安装php对应版本的xdebug扩展;
- 修改 php.ini 配置文件,并重启web服务器
- 配置 PhpStorm
- 安装Chrome的XDebug扩展
- 在PhpStorm 程序中打断点,打开debug模式。
一、安装xdebug扩展
php版本和xdebug版本一定要匹配,下载地址。
如果不清楚要下载哪个版本,点击自动匹配你的php版本,进入操作如下(两个页面):
注意:拷贝的phpinfo()信息必须是整个页面的(CMD+A全选,然后复制粘贴过去),否则下面页面操作提示和实际操作会有出入。
我这里环境是XAMPP,其他环境类似。具体操作按照INSTRUCTIONS
里面的步骤一步一步往下操作,直到第7步就可以了。
提示:
如何你使用mac系统自带的php环境,在第7步拷贝xdebug.so
的时候可能会出现下面的提示:
提示:cp: /usr/lib/php/extensions/no-debug-non-zts-20131226/xdebug.so: Operation not permitted
原因是 OSX 10.11 El Capitan(或更高)添加了一个新的安全机制叫系统完整性保护 System Integrity Protection (SIP),对于目录/System
、/sbin
、/usr
(不包含(/usr/local/)都是不能修改的,需要把它关掉才行,具体操作步骤请看《如何关闭 Mac 中 SIP 安全设置功能》
二、配置php.ini,并重启web服务器
找到并打开php.ini文件,添加如下配置,并重启web服务器。
[xdebug]
;配置xdebug扩展
zend_extension = /Applications/XAMPP/xamppfiles/lib/php/extensions/no-debug-non-zts-20151012/xdebug.so
;是否运行远程终端,必须开启
xdebug.remote_enable = On
xdebug.remote_handler = "dbgp"
xdebug.remote_host = "localhost"
;端口号必须和phpstorm中的配置保持一致,这里设为9100
xdebug.remote_port = 9100
;调试器关键字
xdebug.idekey = PHPSTORM
重启服务器后,查看phpinfo(),出现下面的内容,表示xdebug扩展安装成功。
三、配置PhpStorm
首先,打开PhpStorm,找到「Preferences」-「Languages & Frameworks」-「PHP」-「Debug」,修改对应的xdebug端口号。
然后,在「Debug」-「DBGp Proxy」里面填写以下内容。
接着,在点击「Debug」后面「Servers」,点击左上角的“+”号,添加一个server配置。在里面录入你的项目名和本地调试主机和端口,选择Xdebug调试器。
接着,点击phpstorm工具栏上的的三角形,选择Edit Configurations
,添加项目调试配置,保存后phpstorm配置完成。
设置完成后,打开浏览器访问页面http://test.cc/index.php
,phpstorm进入断点中,那就证明你配置成功了。
这样搞下来,是不是明显比以前使用var_dump()
、print_r()
、echo()
等函数打印调试信息更方便了,Enjoy your coding!
等等,上面的步骤是不是漏掉了什么?之前不是说要装一个Chrome Xdebug扩展应用程序吗?
其实这里的xdebug扩展的作用和phpstorm里面的调试配置作用是一样的,配置其中一个就可以了。
具体怎么安装就不说了,安装好后配置如下,配置好,点击扩展图标,选择“Debug”,图标变成绿色表示成功!
踩到的坑
问题1:拷贝xdebug.so失败
换到mac自带php环境后,无法拷贝xdebug.so文件,上面已经说了,是因为SIP机制引起的。
问题2:Chrome xdebug插件死活启动不了,是灰色的。
为了避免端口冲突将默认的xdebug监听端口改成了9100
,后来百度了发现,坑爹的chrome xdebug竟然会使用9100
这个端口,把php.ini和phpstorm里面xdebug配置改成9001
后就可以了。