PHP cURL - 限制执行时间

4

我们正在使用Web服务,但有时它们无响应,响应时间太长。

如果cURL超过1秒钟没有响应,该如何停止它?

我尝试了:

curl_setopt($ch, CURLOPT_CONNECTTIMEOUT ,1);
curl_setopt($ch, CURLOPT_TIMEOUT, 1);

我也尝试在我的服务器和Web服务之间创建一个“临时页面”:我的服务器通过以下方式调用一个临时页面:

set_time_limit(1);
ini_set('max_execution_time', 1);

这个临时页面使用curl调用了自身的webservice,但仍然没有结果。如果我的webservice执行时间为10秒,我就必须等待10秒。

有什么想法吗?


1
超时处理应该是遵循的方法,因为您在代理脚本中使用的最大执行时间仅指实际脚本执行,外部调用所花费的时间不计算在内。您可以在您正在使用的函数的手册页面上的注释中看到这一点 http://php.net/set_time_limit - mishu
谢谢您的回答。我尝试的第一个解决方案也没有成功。 - d3cima
1
如果您正在Unix服务器上运行PHP,请尝试添加curl_setopt($ch, CURLOPT_NOSIGNAL, 1); - dafyk
1个回答

7

有一个最佳解决方案。

在PHP中设置Curl的超时时间

请参见文档:http://www.php.net/manual/en/function.curl-setopt.php

CURLOPT_CONNECTTIMEOUT - 尝试连接时等待的秒数。使用0无限期等待。
CURLOPT_TIMEOUT - 允许cURL函数执行的最长秒数。
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,0);
curl_setopt($ch,CURLOPT_TIMEOUT,400); //以秒为单位的超时

还要不要忘记扩大php脚本自身的执行时间:

set_time_limit(0); //例如无限制



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