彻底解决 Windows 下 PHP 响应异常缓慢的问题
问题描述PHP 写的后端程序,一旦涉及数据库操作,响应就会变得异常得慢(这里的异常是指:同样的程序在 Linux 下执行,速度没有问题),常常需要等待数十秒,但每次的返回结果中,实际用于执行 SQL 查询的时间均短至毫秒量级。PHP 版本:7.2.25、7.2.13、7.1.33、5.3.3,无论老版本还是目前 7.2 最新的子版本都有一样的问题,看来官方似乎并不想处理。问题排查进行查询操...
·
问题描述
PHP 写的后端程序,一旦涉及数据库操作,响应就会变得异常得慢(这里的异常是指:同样的程序在 Linux 下执行,速度没有问题),常常需要等待数十秒,但每次的返回结果中,实际用于执行 SQL 查询的时间均短至毫秒量级。
PHP 版本:7.2.25、7.2.13、7.1.33、5.3.3,无论老版本还是目前 7.2 最新的子版本都有一样的问题,看来官方似乎并不想处理。
问题排查
进行查询操作请求时,我用的代码是如下的形式:
$db_host = "localhost";
$db_connect = mysqli_connect($db_host,$db_username,$db_password,$db_targetdb);
// mysqli_query ...
通过搜索了解到 PHP 在 Windows 下运行时,遇到 localhost 会尝试先将其解析成 IPv6 地址,当无法解析或者无法用 IPv6 连接数据库时会等待超时,再尝试解析成 IPv4 地址,因此一旦遇到此类操作时就会出现很长的等待时间。
流传的解决方法
目前网上给出的方法主要有:
- 修改 Windows 的 hosts 文件,加上一行
127.0.0.1 localhost
,随后需要 flushdns 一下。
—— 这样似乎能够显式指定将 localhost 解析为 IPv4,但在自己的机器和服务器上都没有任何效果,怀疑 CGI 方式调用 PHP 的时候是无视主机文件的。 - 修改所有涉及 localhost 的 PHP 代码,把 localhost 替换成
127.0.0.1
的形式。
—— 这样做确实解决了一部分问题,但毕竟不是稳妥之计;而且对于 phpMyAdmin 等工具而言就只能冒险修改已经调试完善的代码。 - 禁用相关服务,Win + R 运行命令
services.msc
进入服务项管理,停止一个名称叫 IP Helper,服务名为iphlpsvc
的服务。
—— 与方法 1 类似,看起来有道理但实际上也没起到任何效果。 - 回避问题,使用 5.2 以降的 PHP,甚至使用虚拟网卡、虚拟机这些办法。
—— 拜托,认真的吗??
比较好的解决办法
最后通过修改注册表禁用 IPv6 组件,较好地解决了问题。新建一个注册表项(扩展名 .reg
的纯文本)文件,内容如下:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters]
"DisabledComponents"=dword:000000ff
保存,双击导入(或者按照文件的内容自行修改注册表),重启计算机即可。
更多推荐
已为社区贡献1条内容
所有评论(0)