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 エラーが発生し、その vhost で 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 に答える