我不知道如何做到这一点。
有一个XML Api服务器,我正在使用cURL获取内容;它工作正常。现在我必须调用creditCardPreprocessors
状态。它也处于“进行中状态”,PHP应该等到progess完成。我已经尝试过睡眠和其他方式,但我无法做到。这是我尝试的简化示例变体:
function process_state($xml){
if($result = request($xml)){
// It'll return NULL on bad state for example
return $result;
}
sleep(3);
process_state($xml);
}
我知道,这可能是一个infite循环,但我已经尝试添加计数,如果它达到五,则退出;它不会退出,服务器将挂断,我将在几分钟内发出500个错误,并且Apache无法访问该虚拟主机。
编辑:
另一个例子
$i = 0;
$card_state = false;
// We're gona assume now the request() turns back NULL if card state is processing TRUE if it's done
while(!$card_state && $i < 10){
$i++;
if($result = request('XML STUFF')){
$card_state = $result;
break;
}
sleep(2);
}
答案 0 :(得分:2)
您定义的递归方法可能会导致问题,具体取决于您从服务器返回的响应时间。我想你想在这里使用while循环。它使请求序列化。
$returnable_responses = array('code1','code2','code3'); // the array of responses that you want the function to stop after receiving
$max_number_of_calls = 5; // or some number
$iterator = 0;
$result = NULL;
while(!in_array($result,$returnable_responses) && ($iterator < $max_number_of_calls)) {
$result = request($xml);
$iterator++;
}