PHP CURL对本地主机来说速度太慢了。

10

我在WAMP环境中设置了两个应用程序,两个网站的性能都还可以,它们都可以在一秒内返回数据。问题是,当我从一个站点使用CURL访问另一个站点时,CURL需要大约20秒才能响应。我已经进行了分析,事实上,CURL请求占用了所有时间。

这不应该是这种情况,因为这两个站点都设置在我的计算机上,并且我正在使用localhost/127.0.0.1进行访问。这是某种DNS解析问题吗?


其他脚本需要20秒完成吗? - Salman A
系统32\drivers\etc\hosts文件中是否添加了localhost? - palindrom
1
请使用 127.0.0.1 替代 localhost,请查看 https://dev59.com/GGox5IYBdhLWcg3wSCfk。 - lucian
4个回答

27

我曾遇到同样的问题,并最终发现它来自两个因素:

  1. 我使用 Mac OS X Mavericks 操作系统
  2. 我通过 URL http://myproject.local/ 访问我的项目,因为我在 /etc/hosts 中加入了一行 127.0.0.1 myproject.local

这是因为在 Mac OS X Lion(10.7)之后,.local 域名已经为Bonjour 服务所保留。

将域名更改为其他名称即可解决此问题。


1
加一,也解决了我的问题。谢谢。 - BentCoder
2
你是救星。 - jamestylerpatton

1
我通过设置不同的虚拟主机,例如sitea.dev和siteb.dev来解决了这个问题。如果您在Windows本地主机上为两个站点使用相同的主机,则会出现长时间延迟(与是否存在致命的PHP错误相同)。这不是Curl的问题,因为file_get_contents(url)给我带来了相同的问题。

1
是的,这是一个DNS查找问题。
在Windows 7 x64上,我设法克服了这个问题(在本地主机不同端口之间的应用程序之间进行curl调用),方法是编辑host文件(C:\Windows\System32\drivers\etc)。
取消注释以下行: 127.0.0.1 localhost ,重新启动计算机,问题解决。

我发现更改hosts文件后不需要重新启动计算机即可生效。 - Andy
1
实际上,只有在重新启动后才对我起作用!我也尝试过不重新启动,但它没有起作用。 - Leonardo Atalla
我明白了,所以至少在第一次编辑 hosts 文件后,你应该重新启动。 - Andy

1
如果您正在使用*.local TLD,可以通过在hosts文件中添加IPv4和IPv6条目来解决此问题并享受更快的加载时间。
127.0.0.1   test.local
::1         test.local

最好的

为什么一条注释“将 TLD 更改为其他内容”比这个简单、优雅、快速的答案更重要?添加另一行,不要更改您的 TLD,再次使一切变快。谢谢 Richter。 - vitrus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接