升级PHP与Xdebug版本后调试PrestaShop项目出现ERR_CONNECTION_RESET错误
嘿,我前阵子刚踩过这个一模一样的坑!给PHP开发环境升级版本时,把PHP从7.4.33换成了8.1.32,Xdebug也同步从3.1.6更到了3.4.2-8.1-ts,结果调试PrestaShop项目的时候,浏览器直接弹出ERR_CONNECTION_RESET,之前旧版本用得顺风顺水,当时直接懵了。
先给大家理清楚前后的版本对比,方便排查:
旧版本(一切正常):
- PHP 7.4.33-Win32-vc15-x64
- Xdebug 3.1.6-7.4-vc15-x86_64
新版本(出现连接重置错误):
- PHP 8.1.32-Win32-vs16-x64
- Xdebug 3.4.2-8.1-ts
后来我折腾了好几个小时,试了各种方法,总结了几个大概率能解决问题的方向,你可以挨个试:
先核对线程安全(TS)匹配性!
你新版本用的是Xdebug的TS(线程安全)版本,必须确认你的PHP也是TS版本!虽然你标注的PHP是8.1.32-Win32-vs16-x64,但最好打开phpinfo()页面,找“Thread Safety”这一项,看是不是显示enabled。如果你的PHP是NTS(非线程安全)版本,那直接换成Xdebug的NTS版本,我当时就是这里没注意,换完立刻就好了。检查Xdebug的配置参数是否正确
Xdebug 3.x的配置和旧版本有不少改动,升级后千万别直接沿用旧配置,重点看这几个:- 把
xdebug.mode设为debug(或者develop,debug),旧版本的xdebug.remote_enable已经废弃了,别再用了 - 确认
xdebug.client_host是localhost或者你的调试客户端IP,xdebug.client_port默认是9003,别和其他程序的端口冲突 - 加上
xdebug.start_with_request=yes,这样调试请求能自动触发,避免因为连接触发时机不对导致重置
- 把
验证Xdebug是否正常加载
打开命令行,输入php -v,看输出里有没有Xdebug的版本信息。如果没显示,说明Xdebug根本没加载成功,可能是扩展路径写错了,或者版本不兼容。比如Windows下,Xdebug的文件名得和PHP的编译器版本匹配(你PHP是vs16,Xdebug也得是vs16编译的),文件名应该是类似php_xdebug-3.4.2-8.1-vs16-x64.dll这种。排查PrestaShop与PHP8.1的兼容性
PrestaShop对PHP版本有明确要求,你升级到PHP8.1,得确认你用的PrestaShop版本支持8.1。比如PrestaShop 1.7.8及以上才完全兼容PHP8.1,如果是更老的版本,要么先升级PrestaShop,要么试试暂时关闭opcache.enable,有时候OPcache的缓存会干扰调试连接。看看防火墙或代理有没有拦截
偶尔本地防火墙、杀毒软件或者代理工具会把Xdebug的调试连接当成可疑请求拦截掉。你可以暂时关掉这些工具,再试一次调试,如果能正常连接了,就给Xdebug的端口(默认9003)在防火墙里加个白名单就行。
希望这些方法能帮你解决问题,我当时踩的是线程安全不匹配的坑,你可以先从这个方向查起!
备注:内容来源于stack exchange,提问作者AJoe16

