当cURL在while循环中时,PHP程序挂起

时间:2017-06-19 17:48:53

标签: php json curl

所以我试图从API中获取所有json数据,但是在获取所有数据时我无法可靠地获取循环结束。这是我目前的代码

$num = 1000;
$continue = TRUE;
$loops = 0;

while ($continue == TRUE AND $loops < 3) { 
    // initialize cURL session
    $ch = curl_init($host . '/' . $service . '?limit=500' . '&offset=' . ($num)) or die("Could not connect to API.");

    // set headers
    $httpHeader = array(
            'Content-Type: application/json;charset=UTF-8',
            'Accept: application/json',
            'SecureUrl: ' . $secureUrl,
            'PrivateKey: ' . $privateKey,
            'Token: ' . $token,
    );

    curl_setopt($ch, CURLOPT_HTTPHEADER, $httpHeader);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);

    $response = curl_exec($ch);


    $json = json_decode($response, TRUE);

    if ( isset($json[0]["Key"] )) {
        $continue = FALSE;
    }

    $num += 500;

    $loops++;

    curl_close($ch);
}

之前声明了所有变量。如果num达到某个数字后停止while循环,我就能得到json数据,但这并不总是可靠的。代码停止在第3次或第4次执行时输出json数据,并在那里挂起最多5分钟,然后喷出一堆错误。

任何帮助将不胜感激!

编辑:我找到了我的问题。无论我的if语句的参数是什么,我的程序都拒绝将$continue更改为FALSE。我已经更新了我的代码,如果有人可以说明为什么那会很棒。请注意,即使我将if参数设置为0 == 0$continue仍然不会更改。

编辑2:我已经解决了所有问题。

1 个答案:

答案 0 :(得分:0)

从您收到的错误来看,该网站似乎正在处理无效的网址并使用错误页面进行响应。因此,$response并非虚假,$continue始终为真。

您应该更好地检查结果。检查错误字符串,您知道这些字符串表示没有更多记录(可能有问题)或检查标题。希望API将返回错误的状态代码或其他内容。

即使您这样做,我也会为您的while添加完整性检查。有一些计数器可以阻止循环失控:

$loops = 100;
while( $continue AND $loops > 0 ){
    ...
    //Your code
    ...
    $loops--;
}

这将确保您最多循环100次。