如何在PHP中同时执行两个CMD查询

时间:2017-09-05 09:56:44

标签: php exec

$command1 = "interfacename -S ipaddress -N nms -P company ";
$command2 = "list search clientclass hardwareaddress Mac address ";
if ( exec( $command1 . "&&" . $command2 ) ) {
    echo "successfuly executed";
} else {
    echo "Not successfuly executed";
}

如果命令1(cmd查询)成功执行,我希望下一步执行命令2(也包含一些cmd查询)。在上面的脚本中,只执行命令1。它没有显示命令2的任何结果。

我已经浪费了两天没有找到任何解决方案。

3 个答案:

答案 0 :(得分:0)

您可以使用shell_exec() PHP函数直接在脚本中运行Shell Command

  

语法: string shell_exec(string $ cmd)

示例:

$output = shell_exec('ls -lart');
var_dump($output);  #Showing the outputs
  

您可以在一个命令行中使用多个条件。

示例:

$data   = "rm a.txt && echo \"Deleted\"";
$output = exec($data);
var_dump($output);

if($output=="Deleted"){
   #Successful
}

在上面的示例"Deleted"中,当文件成功删除时,字符串将分配给$output。否则,error/warning/empty字符串将分配给$output变量。您应该使用$output字符串创建条件。

以下是shell_exec()

的文档

注意:函数new line输出将有shell_exec()个字符。

答案 1 :(得分:0)

您可以使用;&&来分隔命令。 ;无条件地运行这两个命令。如果第一个失败,第二个仍然运行。使用&&使第二个命令依赖于第一个命令。如果第一个命令失败,则第二个命令不会运行。 Reference

答案 2 :(得分:0)

如果我正确理解了您的问题,您希望执行$command1,然后仅在$command2成功时才执行$command1

通过使用&&加入命令,您尝试的方式是shell脚本中的正确方法(它甚至可以与PHP函数exec()一起使用)。但是,因为你的脚本是用PHP编写的,所以让我们以PHP的方式编写(实际上,它是以相同的方式,但我们让PHP执行逻辑AND操作)。

使用PHP函数exec()运行每个命令并向其传递三个参数。第二个参数($output,通过引用传递)是一个数组变量。 exec()将命令的输出附加到它。第三个参数($return_var,也通过引用传递)是一个由exec()设置的变量,带有执行命令的退出代码。

Linux / Unix程序的惯例是返回成功的0退出代码和错误的(一个字节)正值(1 .. 255)。此外,Linux shell上的&&运算符知道0成功,非零值是错误。

现在,PHP代码:

$command1 = "ipcli -S 192.168.4.2 -N nms -P nmsworldcall ";
$command2 = "list search clientclassentry hardwareaddress 00:0E:09:00:00:01";

// Run the first command
$out1  = array();
$code1 = 0;
exec($command1, $out1, $code1);

// Run the second command only if the first command succeeded
$out2  = array();
$code2 = 0;
if ($code1 == 0) {
    exec($command2, $out2, $code2);
}

// Output the outcome
if ($code1 == 0) {
    if ($code2 == 0) {
       echo("Both commands succeeded.\n");
    } else {
       echo("The first command succeeded, the second command failed.\n");
    }
} else {
    echo("The first command failed, the second command was skipped.\n");
}

代码结束后,$code1$code2包含两个命令的退出代码;如果$code1不为零,则第一个命令失败,$code2为零,但第二个命令未执行。

$out1$out2是包含两个命令输出的数组,分为行。