Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 尽管设置为“未定义”,卷曲连接仍会断开_Php_Curl_Connection - Fatal编程技术网

Php 尽管设置为“未定义”,卷曲连接仍会断开

Php 尽管设置为“未定义”,卷曲连接仍会断开,php,curl,connection,Php,Curl,Connection,我们编写了一个php/ajax应用程序,它通过cURL连接到API。我们构建它是为了不确定地保持联系,它工作得很好,我们很高兴,定期使用它,然后转移到其他项目 我们最近再次访问了它,发现它开始以不同的时间间隔超时。我们检查了脚本,寻找可能影响cURL调用的任何内容。没什么 在我们的简单cURL脚本中,我们有并且有以下选项: $sch = curl_init(); curl_setopt( $sch, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt($sch, CU

我们编写了一个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和TIMEOUT选项的作用是保持连接打开的原因

但它不起作用

我有两个问题。 1关于编码的任何想法,我们在cURL中缺少的任何东西,或者代码中的其他地方可能会影响连接吗?什么会影响连接? 2如果问题不在于编码,我们如何检查上游连接。如何检测连接实际断开的位置和原因

感谢您的建议,如果您有任何问题或需要其他信息,请随时发布

谢谢

Sam

您还需要设置CURLOPT_连接超时:

另外,尝试添加

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

看看到底是什么失败了。

谢谢Ross-我们在脚本中没有连接超时,因为连接没有问题。问题是保持联系。不过,我确实在脚本中插入了它,30-120秒后它仍然会断开连接。我们还准备了脚本来检查curl_错误。我们感谢您的回答。它是发生在所有URL上,还是只发生在某些URL上?CURL的确切错误信息是什么?您无意中为我们指出了正确的方向,我们不再相信CURL会失败。在试图打印curl_错误时,我注释掉了'curl_setopt$sch,CURLOPT_WRITEFUNCTION','get_data';'防止它在执行curl_exec时运行。卷曲连接,并保持连接,因为它应该。我们责备cURL太快了,我们错了。谢谢你的帮助,罗斯,很抱歉我没有对此事进行尽职调查。
if (curl_errno($sch) > 0) {
    error_log(sprintf(
        "Curl error %d: %s for %s\n", 
        curl_errno($sch), 
        curl_error($sch), 
        $test_url
    ));
}