在php中出错后尝试相同的代码

在php中出错后尝试相同的代码,php,try-catch,Php,Try Catch,这可能是一个很难回答的问题。由于服务器过载而出现错误后,是否可以尝试相同的代码。或者,避免这种情况的最佳解决方案是什么? 例如,以下是curl请求的一部分: $xml = simplexml_load_string($sData); $result = ($xml->result); $description = ($xml->description); 上面的脚本很少在我的日志文件中给出以下两个E_通知: E_NOTICE: Undefined va

这可能是一个很难回答的问题。由于服务器过载而出现错误后,是否可以尝试相同的代码。或者,避免这种情况的最佳解决方案是什么? 例如,以下是curl请求的一部分:

     $xml = simplexml_load_string($sData);
     $result = ($xml->result);
     $description = ($xml->description);
上面的脚本很少在我的日志文件中给出以下两个E_通知:

E_NOTICE: Undefined variable: result in ...
E_NOTICE: Undefined variable: description in ...
我想这是因为当时远程服务器很忙。但是如果我在一分钟后尝试卷曲请求,它就可以正常工作了。
避免这种情况的最佳方法是什么?我可以通过捕获抛出的错误来尝试脚本吗?但我没有用过试抓块。请帮助我解决此问题。

您可以尝试循环,直到您得到所需的内容(或达到最大值)。例如:

$done = false;
  $tries = 0;  
  do {
  $xml = simplexml_load_string($sData);

  if ( !empty($xml->result) && !empty($xml->description) ) {
    $done = true;
  } else {
    $tries++;
    sleep( 1 );
} while ( !$done && $tries < 10 );
$result = $xml->result;
$description = $xml->description;
$done=false;
$trys=0;
做{
$xml=simplexml\u load\u字符串($sData);
如果(!empty($xml->result)&&!empty($xml->description)){
$done=true;
}否则{
$T++;
睡眠(1);
}而(!$done&&$trys<10);
$result=$xml->result;
$description=$xml->description;

我不知道这是否是最好的解决方案,但它应该有效。(您可以尝试一些其他检查,而不是
清空
,更改睡眠时间和重试次数以适应您的需要,但总的想法是这样的。

谢谢@Muc。如果在服务器等待发送前一个请求时,其他请求来自我的其他客户,该怎么办?这种情况下会发生什么?我的服务器可以处理吗它?你认为这是因为它无法加载$sData吗?但我的错误日志文件中没有关于$xml或$sData的信息。如果其他客户发出相同的请求,这将取决于服务器的响应能力(硬件、配置等)。也许这就是这里发生的事情,服务器无法处理这么多请求,所以它会删除一些…您可能需要查看以检查xml错误。我不认为它会因为我的客户而删除。可能是因为我请求的第三方服务器。至于libxml错误,这是一个很好的观点。我将再看一个问题。你认为问题是simplexml无法在curl请求中加载字符串吗?还是我必须循环整个curl请求,或者只循环上面提到的部分。目前我只测试你提供给我的部分。我做了一些轻微的更改。让我看看会发生什么。但这需要一些时间,因为这种情况很少发生。我将发布结果是:)。