PHP:重试查询一定次数或直到成功

时间:2009-04-03 00:38:16

标签: php loops

我正在对Alexa API进行查询,由于某种未知原因,它偶尔会失败。当它失败时,我想自动重试查询,最多10次。

当它失败时,API返回的响应包含子串AuthFailure

我可以执行哪种循环重试查询,直到返回的响应不包含子字符串AuthFailure或尝试了10次重试?

3 个答案:

答案 0 :(得分:4)

您可以使用for循环执行此操作。

for($i=0; $i < 10; $i++) {
    $return = (Alexa call here) 
    if(!strstr($return,"AuthFailure"))
        break;
}

将10调整为您想要的任何数字。更好的是,在其他地方使用常量define()。这将一直运行,直到尝试次数耗尽或返回值不包含“AuthFailure”。

答案 1 :(得分:2)

我会做这样的事情:

define('ALEXA_FAILED', 'AuthFailure');

$response = ALEXA_FAILED;
$tries = 0;

while ($tries <= 10 && stripos($response, ALEXA_FAILED) !== FALSE)
{
    $response = GetAlexaResponse();
    $tries++;
}

答案 2 :(得分:0)

就个人而言,我会将调用包装在一个函数中,例如:

public function getAlexaResponse($aParam)
{
   //code that does the call
   return $response;
}

我会使用额外的参数扩展该函数并以递归方式调用它:

public function getAlexaResponse($aParam, $attempts = 10)
{
   //code that does the call
   if(!strstr($response,"AuthFailure") && ($attempt > 0)){
       $this->getAlexaResponse($aParam, --$attempts);
   }
   return $response;
}