当前位置: 首页 > 知识库问答 >
问题:

PHP - 如何使命令外壳保持打开状态以执行多个命令?

邓俊英
2023-03-14

嗨,我正试图在一台windows机器上使用PHP执行多个命令。我试过这个代码:

<?php
$output= shell_exec("powershell.exe");
$output2= shell_exec("write-host gokul");
shell_exec("exit");
echo( '<pre>' );
echo( $output );
echo( $output2 );
echo( '</pre>' );
?>

PHP 使用新的 shell 执行每个命令,并在完成后将其关闭!

我知道每个“shell_exec”创建一个新的shell,并且控制等待直到命令执行完成。我怎样才能创建一个在后台保持打开的shell,直到我关闭它?

我不确定“proc_open”或“popen”是否有帮助?

更新当我尝试PROC_OPEN()

$descriptorspec = array(
   0 => array("pipe", "r"),  // stdin is a pipe that the child will read from
   1 => array("pipe", "w"),  // stdout is a pipe that the child will write to
   2 => array("file", "error.txt", "a") // stderr is a file to write to
);    
$process = proc_open('cmd.exe', $descriptorspec, $pipes);

if (is_resource($process)) {
    fwrite($pipes[0], 'dir');
    fwrite($pipes[0], 'powershell.exe');
    fwrite($pipes[0], 'write-host gokul');
    fclose($pipes[0]);

    echo stream_get_contents($pipes[1]);
    fclose($pipes[1]);

    proc_close($process);
}

它只打印提示符。真的可以用proc_open执行多个命令吗?如果有,如何实现?

Microsoft Windows [Version 6.1.7601] Copyright (c) 2009 Microsoft Corporation. All rights reserved. C:\wamp\bin\apache\Apache2.2.17>More?

共有1个答案

颛孙兴旺
2023-03-14

使用<code>proc_open

它应该是这样的:

fwrite($pipes[0], 'dir' . PHP_EOL);
fwrite($pipes[0], 'powershell.exe' . PHP_EOL);
fwrite($pipes[0], 'write-host gokul' . PHP_EOL);
 类似资料:
  • 我想做这样的事情,我可以在以下代码中运行多个命令: 我如何执行多个命令? 谢了。

  • 问题内容: 我想做这样的事情,我可以依次运行多个命令。 问题答案: 想通了,使用 。 例: 多行中的相同示例: 要么:

  • 我正在处理我的一个项目。我正在windows机器上使用XAMPP开发该项目。这就是我面临的问题。我需要在服务器上执行shell脚本,并在网页上显示结果。问题是,大多数脚本都按预期运行,但我无法获得以下命令的输出:, ls, cat, pwd 因为这些命令返回给我一个空白数组。 我找不到确切的问题。

  • 问题内容: 我试图在一行中合并多个Linux命令以执行部署操作。例如 问题答案: 如果仅在上一个命令成功的情况下才执行每个命令,请使用运算符将它们组合: 如果其中一个命令失败,则将不执行其后的所有其他命令。 如果要执行所有命令而不管先前的命令是否失败,请使用分号将它们分开: 在您的情况下,我想您希望第一种情况下,下一条命令的执行取决于上一条命令的成功。 您还可以将所有命令放在脚本中,然后执行该脚本

  • 问题内容: 我想直接在命令行执行单个php语句,而不必使用单独的php文件。 这怎么可能 ? 问题答案: 如果您要在命令行中使用PHP,建议您安装 phpsh,这是一个不错的PHP shell。这很有趣。 无论如何,php命令提供了 两个开关来从命令行执行代码 : 您可以这样使用php的 -r开关 : 上面的PHP命令应该 输出 并 返回, 如您所见: 另一个有趣的开关是 php -a : 与 p

  • 问题内容: 我正在尝试使用自动响应来自动化mysql_secure_installation脚本。我的代码如下: 我正在自动化的实际问题如下: 但这给了我一个错误“很抱歉,您不能在此处使用空密码”,但是在屏幕上,我习惯按第一个问题的返回键。 问题答案: 您可以尝试使用Expect。看看这种自动化的mysql_secure_installation或我的修改。