来自NetBeans官网的帮助文档:
https://netbeans.org/kb/docs/php/debugging_zh_CN.html
但具体问题,我们还是要说下
准备工作
本地部署的server环境
下载与php版本对应的xdebug http://www.xdebug.org
配置php
下载xdebug后,在php.ini 中配置xdebug
zend_extension=php_xdebug-2.4.1-7.0-vc14-nts.dll xdebug.remote_port=9001 xdebug.remote_enable=1 xdebug.remote_host=127.0.0.1 xdebug.remote_autostart=1 xdebug.idekey="netbeans-xdebug"
这一步非常重要,因为坑就在这,当配置中扩展为如下的配置时,phpinfo 显示是正确的
extension=php_xdebug-2.4.1-7.0-vc14-nts.dll
但当我们NetBeans调试php时,一直提示“等待NetBeans连接xdebug”
所以,我们要使用命令行查看已经加载的模块,查看xdebug是否正确加载
php -m
当提示:PHP Warning: Xdebug MUST be loaded as a Zend extension in Unknown on line 0
意思就是xdebug必须加载到zend modules的扩展中
extension意为基于php引擎的扩展
zend_extension意为基于zend引擎的扩展
所以 正确的方法是
zend_extension=php_xdebug-2.4.1-7.0-vc14-nts.dll
在php.ini 中还要设置
output_buffering = Off
配置NetBeans
在NetBeans的 工具-选择-php 中配置 (本人NetBeans版本8.0.2)
在这里面也有个坑
就是调试器端口, 网上一般都是9000,但是有没有考虑用Nginx的感受,在用nginx作为服务器代理的时候,nginx一般使用的就是9000
server { listen 80; server_name web.com; root "F:/web"; location / { index index.html index.htm index.php; autoindex on; if (!-e $request_filename){ rewrite ^/(.*) /index.php?r=$1 last; } } location ~ .php(.*)$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_split_path_info ^((?U).+.php)(/?.+)$; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info; include fastcgi_params; } }
这就是为什么我们在配置php的xdebug时候使用9001端口, (php.ini 中的端口要与NetBeans中的调试器端口一致)
会话ID 与 xdebug.idekey 保持一致
不然同样提示:“等待NetBeans连接xdebug”
NetBeans断点调试php
这一步应该不用多说,只要用过NetBeans就知道如何调试,要说明一点,按F7 是断点的一步步调试
参考: