PHP程序在while循环中卷曲时挂起
因此,我试图从API获取所有json数据,但是在获取所有数据的同时,我无法可靠地结束循环。这是我目前拥有的代码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
$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
确定偏移量不符合逻辑