我们编写了一个通过cURL连接到API的php / ajax应用程序。我们建立它以保持连接无限,它工作正常,我们很高兴,定期使用它,然后转移到其他项目。
我们最近重新访问了它,并发现它已经开始以不同的间隔超时。我们检查了脚本,查找可能影响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和TIMEOUT选项的效果使我们的连接保持开放。
但它不起作用。
我有两个问题
1)关于编码的任何想法,我们在cURL中遗漏的任何内容,或者代码中可能存在可能影响连接的其他内容?什么会影响连接?
2)如果问题不在于编码,我们如何检查上游连接。您如何检测连接实际被丢弃的位置和原因?
感谢您的建议,如果您有任何疑问或需要其他信息,请随时发布。
由于
山姆
答案 0 :(得分: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
));
}
看看究竟是什么失败了。