情景复现
项目本地开发过程中写了一个curl方法向远程服务器推送一条信息。本地执行速度正常。但是服务器上执行缺异常缓慢。
度娘了好久,都不得其解释,终于在一篇文章Curl的毫秒超时的一个"Bug" - 风雪之隅 (laruence.com)的评论下找到思路:CURLOPT_IPRESOLVE;最终度娘出了解决方案。
参考文档:curl_exec和wget执行太慢,IPv6惹的祸 CURLOPT_IPRESOLVE_zhangfeng1133的专栏-CSDN博客
问题原因
一句话总结:服务器都开启了 IPv6 却没有路由,无法真正工作。在没有 IPv6 的情况下,会等待 IPv6 解析失败 timeout 之后才按以前的正常流程去找 IPv4
解决方案
对于 PHP curl 来讲,只需要加上下面一句即可解决延迟问题:
curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4 );
PBootCms的解决方案
文件位置:/core/function/handle.php,搜索curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);,
在下方插入一行
curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4 );
到此,问题解决。
联系客服
请使用QQ扫码
请使用微信扫码
文章评论(审核通过可见)