【问题标题】:PHP: Right process to avoid timeout issuePHP:避免超时问题的正确过程
【发布时间】:2015-11-05 18:33:24
【问题描述】:

我有一个 PHP 网站,我使用的其中一个页面对另一台服务器进行 CURL 调用。现在这个服务器需要大约 45 秒来响应,我对此无能为力。实际上有 2 个步骤来获取信息,第一步是发送更新信息的请求(这大约需要 43 秒)和在我需要发送另一个请求以取回数据之后(通常需要 2-5 秒)。

我的服务器在 GoDaddy 上,显然有时它会超时(CGI 超时),因为我认为通常是 30 秒。

此脚本(询问请求 + 取回数据)通常在夜间通过 cron 作业触发,但也可以在白天触发。

所以我想知道:拆分信息以避免超时问题的最佳方法是什么?

我只是想发送更新请求而不关心结果。然后,大约一分钟后,我会发送一个请求以取回数据。但是,我不知道是否可以在 PHP 中做一个计时器,如果可以,页面是否会超时?

谢谢!

【问题讨论】:

标签: php curl timeout


【解决方案1】:

您可以在 PHP 代码中设置超时值以允许更多时间。

Setting Curl's Timeout in PHP

如果你想单独运行这些文件,我会为第二个文件设置一个单独的 cron 作业。

【讨论】:

  • 感谢您的回复。问题不在于 PHP 文件,而在于 CGI 超时...我已经使用 set_time_limit(120);
  • 您是否增加了 CURLOPT 超时设置?我已经更新了答案中的链接。
  • 是的,也这样做了,(见下文)
  • 如果是共享主机,貌似你没有能力增加超时时间。您是否在其他服务器上尝试过此操作以验证它是否正常工作,以便您可以将其精确定位到 GoDaddy 服务器?
  • 感谢您的回答。我确实联系了 GoDaddy,他们准确地告诉了我这一点(不能增加超时)。我没有在其他服务器上尝试过。我更想找到一个解决方案,而不是为专用服务器付费:)
【解决方案2】:

使用 CURLOPT_CONNECTTIMEOUT 增加服务器响应时间。

CURLOPT_CONNECTTIMEOUT  

尝试连接时等待的秒数。使用 0 无限期等待。

然后您需要使用 CURLOPT_TIMEOUT 来启用选项 CURLOPT_CONNECTTIMEOUT。

这样的,

curl_setopt($ch, CURLOPT_CONNECTTIMEOUT ,0); // 0 for wait infinitely, not a good practice

curl_setopt($ch, CURLOPT_TIMEOUT, 400); //in seconds

你也可以在微秒内设置,像这样,

 CURLOPT_TIMEOUT_MS

【讨论】:

  • 谢谢,但我已经在脚本中有这两行:<pre> <code> curl_setopt($ch, CURLOPT_CONNECTTIMEOUT ,0); curl_setopt($ch, CURLOPT_TIMEOUT, 120); //timeout in second </code></pre>
  • php 时间限制 set_time_limit(0); 怎么样?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-01
相关资源
最近更新 更多