2

我不知道怎么做这个。有一个 XML Api 服务器,我正在使用 cURL 获取内容;它工作正常。现在我必须打电话给creditCardPreprocessors国家。它也有“进行中状态”,PHP 应该等到进程完成。我已经尝试过睡眠和其他方式,但我做不到。这是我尝试过的简化示例变体:

function process_state($xml){
  if($result = request($xml)){
  // It'll return NULL on bad state for example
    return $result;
  }
  sleep(3);
  process_state($xml);
}

我知道,这可能是一个无限循环,但我尝试添加计数以在达到 5 时退出;它不会退出,服务器将挂起,几分钟内我将出现 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);
}
4

1 回答 1

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++; 
}
于 2013-01-06T03:13:42.960 回答