我正在通过php在eXist数据库上运行curl请求。数据集非常大,因此,数据库总是需要很长时间才能返回XML响应。为了解决这个问题,我们设置了一个curl请求,它应该有一个很长的超时。

$ch = curl_init();
$headers["Content-Length"] = strlen($postString);
$headers["User-Agent"] = "Curl/1.0";

curl_setopt($ch, CURLOPT_URL, $requestUrl);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERPWD, 'admin:');
curl_setopt($ch,CURLOPT_TIMEOUT,1000);
$response = curl_exec($ch);
curl_close($ch);

然而,curl请求始终在请求完成之前结束(通过浏览器请求时<1000)。有人知道这是否是在curl中设置超时的正确方法吗?


当前回答

嗯,在我看来,CURLOPT_TIMEOUT定义了任何cURL函数被允许执行的时间。我认为您实际上应该查看CURLOPT_CONNECTTIMEOUT,因为它告诉cURL等待连接完成的最大时间。

其他回答

如果您使用PHP作为fastCGI应用程序,那么请确保检查了fastCGI超时设置。 参见:PHP curl put 500错误

嗯,在我看来,CURLOPT_TIMEOUT定义了任何cURL函数被允许执行的时间。我认为您实际上应该查看CURLOPT_CONNECTTIMEOUT,因为它告诉cURL等待连接完成的最大时间。

您不能从浏览器运行请求,它会超时等待运行CURL请求的服务器响应。浏览器可能会在1-2分钟内超时,这是默认的网络超时。

您需要从命令行/终端运行它。

您的代码将超时设置为1000秒。对于毫秒,使用CURLOPT_TIMEOUT_MS。

参见文档: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); //timeout in seconds

另外,不要忘记放大PHP脚本self的执行时间:

set_time_limit(0);// to infinity for example