2015-11-05 54 views
1

我有一个PHP网站,我使用的网页之一使另一台服务器的CURL调用。现在这个服务器需要大约45秒的时间来响应,而且我无能为力。实际上有两个步骤来获取信息,第一步是发送请求来更新信息(这大约需要43秒),并且之后我需要发送另一个请求来获取数据(通常需要2-5秒)。PHP:正确的过程,以避免超时问题

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

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

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

我正在考虑发送更新请求,而不关心结果。然后,大约一分钟后,我会发送请求以获取数据。但是,我不知道是否甚至有可能在PHP中执行一个计时器,如果是这样,那么页面超时呢?

谢谢!

+0

您可能想看看这是否会在服务器上运行:HTTP:/ /stackoverflow.com/a/20797579/316900 – seanvalencourt

回答

0

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

Setting Curl's Timeout in PHP

如果要单独运行这些文件,我会成立了第二个文件单独cron作业。

+0

感谢您的回复。问题不在于PHP文件,而在于CGI超时...我已经使用set_time_limit(120); –

+0

您是否增加了CURLOPT超时设置?我已经更新了我答案中的链接。 – ckimbrell

+0

是的,也做到了,(见下文) –

0

使用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 
+0

谢谢,但我已经在脚本中有这两行:'

 curl_setopt($ch, CURLOPT_CONNECTTIMEOUT ,0); curl_setopt($ch, CURLOPT_TIMEOUT, 120); //timeout in second 
' –

+0

怎么样php的时间限制set_time_limit(0);? – monir009

+0

请参阅第1个答案....已完成,它不工作 –