以下PHP代码按预期工作。当代码无法在4次尝试中执行命令时,我需要回显“复制错误”消息。
for($num_tries = 0 ; $num_tries < 4 ; $num_tries++)
{
$cloudcmd = "cp abc xyz ";
system($cloudcmd,$status);
if($status != 0)
{
sleep(3) ;
continue ;
}
break ;
}
我尝试在休息后添加echo命令;但它似乎不起作用。
答案 0 :(得分:2)
严格来说,您不需要引入额外的变量和检查来执行此操作。
保持简单,你可以在for循环之外检查for循环变量$ num_tries的值:
if($num_tries==4)....
你也可以在for循环后使用$ status变量。
if($status!=0)....
答案 1 :(得分:1)
$success = false;
for($num_tries = 0 ; $num_tries < 4 ; $num_tries++)
{
$cloudcmd = "cp abc xyz ";
system($cloudcmd,$status);
if($status != 0)
{
sleep(3) ;
continue ;
}
$success=true;
break ;
}
if($success)
{
//do your thing
}
答案 2 :(得分:1)
尝试这样做:
for ($num_tries=0;$num_tries < 4;$num_tries++)
{
system('cp abc xyz',$status);
if ($status === 0)
{
break;
}
sleep(3);
}
if ($status !== 0)
{
echo 'error';
}
一旦$status
为0,这个循环就会中断,这意味着system()
调用成功,循环之后,$status
值将被访问,仍然是(PHP没有' t有块范围),所以检查它的值并在需要时回显。您可以使用echo
轻松替换exit()
语句,以停止脚本的其余部分。
答案 3 :(得分:1)
<?php
for($num_tries = 1 ; $num_tries <=4 ; $num_tries++){
$cloudcmd = "cp abc xyz ";
system($cloudcmd,$status);
if($status != 0) {
if($num_tries!=4){
sleep(3);
continue;
} else {
echo "error";
}
}
break;
}
?>
答案 4 :(得分:0)
break
语句导致循环中断,并且跳过循环中发生的任何代码后跳过。
也许,你可以这样做:
$success = false;
for($num_tries = 0 ; $num_tries < 4 ; $num_tries++) {
if (success()) {
// do something
$success = true;
}
}
echo ($success) ? 'Success' : 'Failure';