Ubuntu 18.04下Apache 2+Xdebug+PHP 7.2断点调试失效问题
我之前升级Ubuntu版本后也碰到过几乎一模一样的问题,给你几个针对性的排查和解决方向:
确认Apache对应的PHP配置里Xdebug的关键参数
很多人容易忽略CLI和Apache用的是不同的php.ini配置文件!你可以在网页里放一个phpinfo()文件,查看加载的配置路径,然后检查这个文件里的Xdebug设置:xdebug.remote_enable = 1 xdebug.remote_autostart = 1 # 这个很重要,确保每个请求都自动触发调试会话 xdebug.remote_port = 9001 # 避开Ubuntu 18.04里systemd-resolved默认占用的9000端口 xdebug.remote_handler = dbgp xdebug.remote_host = 127.0.0.1修改后一定要重启Apache:
sudo systemctl restart apache2检查是否使用PHP-FPM而非mod_php
如果phpinfo()里显示SAPI是fpm-fcgi,那Xdebug的配置要放到PHP-FPM的配置文件里(比如/etc/php/7.2/fpm/php.ini或者对应的pool.d配置),修改后需要重启PHP-FPM服务:sudo systemctl restart php7.2-fpm,光重启Apache没用。验证NetBeans的调试会话设置
打开NetBeans的「工具」->「选项」->「PHP」->「调试」,确认:- 调试端口和Xdebug配置的
remote_port一致 - 会话ID设置为
netbeans-xdebug - 勾选「接受外部连接」
另外,确保没有勾选「仅在第一行暂停」(不过你说只停一次,这个可能不是问题,但可以确认下)
- 调试端口和Xdebug配置的
排查调试会话Cookie丢失问题
如果你的页面有重定向或者跨路径访问,可能XDEBUG_SESSION的Cookie没被正确携带。可以打开浏览器的开发者工具,在「应用」->「Cookie」里查看是否存在这个Cookie,并且路径是/(全站有效)。检查Xdebug版本兼容性
Ubuntu 18.04默认的Xdebug版本可能和PHP7.2存在兼容问题,你可以手动安装适配的版本:sudo pecl uninstall xdebug sudo pecl install xdebug-2.9.8 # 这个版本完美兼容PHP7.2安装后记得在对应的php.ini里添加
zend_extension=xdebug.so,再重启服务。排除代码或框架的干扰
有些PHP框架或者自定义代码可能会通过ini_set()修改Xdebug配置,比如关闭remote_enable。你可以在断点前加一行var_dump(ini_get('xdebug.remote_enable'));,确认调试时这个参数是1。
内容的提问来源于stack exchange,提问作者Van

