3

以下 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 命令;但它似乎不起作用。

4

5 回答 5

2

严格来说,您不需要引入额外的变量和检查来执行此操作。

为简单起见,您可以在 for 循环之外检查 for 循环变量 $num_tries 的值:

if($num_tries==4)....

在 for 循环之后,您还可以使用 $status 变量。

if($status!=0)....
于 2012-06-27T06:58:33.130 回答
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
    }
于 2012-06-27T06:53:21.130 回答
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';
}

一旦为$status0,这个循环就会中断,这意味着system()调用成功,在循环之后,该$status值仍然可以访问(PHP 没有块范围),所以检查它的值并在需要时回显。您可以使用 , 轻松替换echo语句exit()以停止脚本的其余部分。

于 2012-06-27T07:00:32.607 回答
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;  
}
?>
于 2012-06-27T07:41:26.150 回答
0

语句会导致循环中断,并且在break循环内出现在中断之后的任何代码都将被跳过。

也许,你可以做这样的事情:

$success = false;

for($num_tries = 0 ; $num_tries < 4 ; $num_tries++) {

    if (success()) {
        // do something
        $success = true;
    }
}

echo ($success) ? 'Success' : 'Failure';
于 2012-06-27T06:55:12.287 回答