PHP程序在while循环中卷曲时挂起

PHP程序在while循环中卷曲时挂起,php,json,curl,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

因此,我试图从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=1000;
$continue=TRUE;
$loops=0;
而($continue==TRUE,$loops<3){
//初始化cURL会话
$ch=curl_init($host.'/'.$service.'?limit=500'.&offset='.($num))或die(“无法连接到API”);
//设置标题
$httpHeader=数组(
'内容类型:application/json;charset=UTF-8',
'接受:应用程序/json',
“SecureUrl:”。$SecureUrl,
“PrivateKey:”。$PrivateKey,
“令牌:”。$Token,
);
curl_setopt($ch,CURLOPT_HTTPHEADER,$HTTPHEADER);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,TRUE);
$response=curl\u exec($ch);
$json=json_decode($response,TRUE);
if(isset($json[0][“Key”])){
$continue=FALSE;
}
$num+=500;
$loops++;
卷曲关闭($ch);
}
所有变量都是先前声明的。如果我在
num
达到某个数字时停止while循环,我就能够获得json数据,但这并不总是可靠的。代码在第3次或第4次执行时停止输出json数据,并在抛出大量错误之前在那里挂起长达5分钟

任何帮助都将不胜感激

编辑:我发现了我的问题。无论if语句的参数是什么,我的程序都拒绝将
$continue
更改为
FALSE
。我已经更新了我的代码,如果有人能解释为什么这会很好。请注意,即使我将if参数设置为
0==0
$continue
仍不会更改


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

从您收到的错误来看,站点似乎正在处理无效的URL,并以错误页面进行响应。因此,
$response
不是错误的,
$continue
总是正确的

你应该更好地检查结果。检查错误字符串,您知道这些字符串将指示不再有记录(可能有问题),或者检查标题。希望API会返回一个错误的状态码或其他东西

即使在您这样做之后,我也会在您的
中添加一个健全性检查,而
。有一些计数器可以防止回路失控:

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

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

您会遇到什么错误?我看不出您在哪里输出任何数据,您是如何用我认为您不想执行的每个循环覆盖数据的。@aynber“偏移量超过了记录总数。”@cmorrissey我通常会注释掉第二个选项,这样我就可以在屏幕上看到json输出。稍后我还将在for循环中使用解码后的json,因此每次都被覆盖并不重要,因为我只需要简单地使用它。您不应该在这样的循环中进行curl调用,您请求的是无法访问的外部地址,甚至可以阻止您的常量请求。你应该用回调来处理它。对于挂起问题,根据您的评论,您的
$num+=500
确定偏移量不符合逻辑