2012-10-03 100 views
1

我们编写了一个php/ajax应用程序,该应用程序通过cURL连接到API。我们建立它保持连接不确定,它运行良好,我们很高兴,定期使用它,然后转移到其他项目。尽管设置为不确定,cURL连接仍会丢失

我们最近重新访问了它,发现它已经开始以不同的时间间隔超时。我们检查了脚本寻找可能影响cURL调用的任何内容。没有。

我们有,并且有,在我们的简单脚本卷曲这些选项:

$sch = curl_init(); 
curl_setopt($sch, CURLOPT_SSL_VERIFYHOST, 0); 
curl_setopt($sch, CURLOPT_URL, $test_url); 
curl_setopt($sch, CURLOPT_WRITEFUNCTION, 'get_data'); 
curl_setopt($sch, CURLOPT_NOSIGNAL, 1); 
curl_setopt($sch, CURLOPT_TIMEOUT,0); 
$output = curl_exec($sch); 

我的理解是,NOSIGNAL和超时选项的作用是什么让我们的连接打开。

但它不工作。

我有两个问题。
1)关于编码的任何想法,cURL中缺少的任何内容,或者代码中可能会影响连接的其他位置?什么会影响连接?
2)如果问题不在编码中,我们如何检查上游连接。如何检测连接实际上被丢弃的位置以及为什么?

谢谢您的建议,如果您有任何问题或需要其他信息,请不要犹豫,发布。

感谢

山姆

回答

0

您需要设置CURLOPT_CONNECTTIMEOUT还有:

curl_setopt($sch, CURLOPT_CONNECTTIMEOUT,0); 

此外,尝试添加

if (curl_errno($sch) > 0) { 
    error_log(sprintf(
     "Curl error %d: %s for %s\n", 
     curl_errno($sch), 
     curl_error($sch), 
     $test_url 
    )); 
} 

,看看到底什么是失败。

+0

谢谢罗斯 - 我们在脚本中没有connecttimeout,因为连接没有问题。问题是保持联系。但是我没有将它插入到我们的脚本中,并且它在30-120秒后仍然断开连接。我们也有脚本来检查curl_error。我们感谢您的回答。 – user1715546

+0

它发生在所有的网址上,还是只发生在某些网址上?什么是CURL的确切错误信息? –

+0

您无意中指出我们正确的方向,我们不再相信cURL有失败。在试图打印curl_errors时,我评论说'curl_setopt($ sch,CURLOPT_WRITEFUNCTION,'get_data');'以防止它在执行curl_exec时运行。 CURL连接并保持连接。我们很快就责怪cURL,我们错了。感谢您对罗斯的帮助,对于我在这件事上没有尽到尽职调查表示歉意。 – user1715546