【问题标题】:How to execute two CMD queries in PHP simultaneously如何在 PHP 中同时执行两个 CMD 查询
【发布时间】:2017-09-05 09:56:43
【问题描述】:
$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 的任何结果。

我为此浪费了两天时间,没有找到任何解决方案。

【问题讨论】:

  • 这并不能解决我的问题

标签: php exec


【解决方案1】:

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

【讨论】:

  • 我使用过 && 运算符,但它不起作用@Krishanaraj
【解决方案2】:

您可以使用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()的文档

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

【讨论】:

  • 如何使用shell_exec同时执行条件cmd查询?
  • 我在等你的回答@Sumon Sarker
【解决方案3】:

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

您尝试的方式,通过将命令与&& 连接起来是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 是包含两个命令输出的数组,按行拆分。

【讨论】:

  • 上面代码中的命令2没有执行,直接进入else部分并回显(第一个命令成功,第二个命令失败。\n)
  • 它报告发生了什么。第二个命令返回的退出代码与0 不同,或者根本没有运行。 $code2 的值是多少?
【解决方案4】:

我不确定是否知道同时执行,但我确定一个 cmd 依赖于另一个 cmd 执行操作。在这里,我首先运行单次执行 cmd 以清除所有设置的路径,其次我已经声明了我的文件路径,第三我安装了 angular cmd npm install

    $path = "D:/xampp/htdocs/tests/omni-files-upload/aa-test/src";
        $command_one = "cd /";
        $command_two = "cd ".$path;
        $command_three = "npm install";
        
        @exec($command_one."&& ".$command_two."&& ".$command_three);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-24
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    • 2019-01-26
    • 2010-10-22
    相关资源
    最近更新 更多