php - 尝试,捕获并重试
有时我的代码会中断,它超出了我的控制范围
我该怎么做?
try {
//do my stuff
}
catch {
//sleep and try again
}
代码不是那么多,所以它都是一个函数,所以我不想做另一个函数,如果我不需要的话
有时我的代码会中断,它超出了我的控制范围
我该怎么做?
try {
//do my stuff
}
catch {
//sleep and try again
}
代码不是那么多,所以它都是一个函数,所以我不想做另一个函数,如果我不需要的话
你可以尝试这样的事情:
function exception_error_handler($errno, $errstr, $errfile, $errline ) {
throw new ErrorException($errstr, 0, $errno, $errfile, $errline);
}
set_error_handler("exception_error_handler");
$NUM_OF_ATTEMPTS = 5;
$attempts = 0;
do {
try
{
executeCode();
} catch (Exception $e) {
$attempts++;
sleep(1);
continue;
}
break;
} while($attempts < $NUM_OF_ATTEMPTS);
function executeCode(){
echo "Hello world!";
}
在这里,我们执行一个循环,以便代码至少执行一次。如果函数遇到错误,它将引发块将捕获的 。然后,该块会将变量递增 1,并调用以测试下一次迭代的条件。如果已经进行了五次尝试,则循环将退出,脚本可以继续。如果没有错误,即块中的语句未执行,则循环将 完成脚本。do...while
executeCode()
Exception
try...catch
catch
$attempt
continue
while
continue
catch
break
请注意从此处获取的函数的使用。我们这样做是为了捕获函数中的所有错误,即使我们自己不手动抛出错误。set_error_handler
executeCode()
如果您认为您的代码可能会失败多次,则 sleep()
函数在语句之前可能是有益的。“减慢”可能的无限循环将有助于降低您的.continue
CPU Usage
让脚本无限运行直到成功不是一个好主意,因为在循环的前 100 次迭代中存在的错误不太可能得到解决,从而导致脚本“冻结”。通常,最好在发生错误时重新评估要多次运行的代码,并对其进行改进以正确处理遇到的任何错误。
只是:
function doSomething($params, $try = 1){
try{
//do something
return true;
}
catch(Exception $e){
if($try <5){
sleep(10);
//optionnaly log or send notice mail with $e and $try
doSomething($params, $try++);
}
else{
return false;
}
}
}