【问题标题】:PHP To Run Bash CommandPHP 运行 Bash 命令
【发布时间】:2018-05-11 01:09:59
【问题描述】:

我正在尝试制作一个简单的 php 表单,该表单执行一个在远程服务器上创建密钥的 bash 脚本。我环顾四周,发现了几个不同的选择。我已经能够使用 shell_exec() 和 passthu() 获得一些结果,但仅适用于 ls 和 echo 之类的命令。问题是它没有向我显示输出。我不认为它被执行。我确信 bash 脚本可以正常工作,因为我每天都在使用它。

理想情况下,我想输入一个传递给脚本的值,然后显示输出。 Form Screenshot

表格:

<form action="aws_create.php" method="post">
    <div class="form-group">
        <input class="form-control" name="aws_id" id="inputawsid" type="number" aria-describedby="emailHelp" placeholder="000000000000">
    </div>
    <input type="submit">

</form>

POST:aws_create.php

<?php
$awsid  = $_POST["aws_id"];
$output = passthru("/usr/local/bin/createkeys.sh $awsid");
echo "<pre>$output</pre>";
?>

【问题讨论】:

  • 输出只是空的。它甚至没有显示 shell 错误
  • 也试过“$output = exec('createkeys.sh '.escapeshellarg($awsid));”
  • /usr/local/bin/createkeys.sh 这是做什么的?
  • @ThiruShetty 它使用 AWS CLI 工具。它只是创建了一个 IAM ROLE。它可能有 3 个不同的 aws cli 命令。
  • 你试过shell_exec吗?

标签: php bash twitter-bootstrap lamp


【解决方案1】:

void passthru ( string $command [, int &$return_var ] ) http://php.net/manual/en/function.passthru.php

如您所见,passthru 在您的行中返回 void,因此

$output = passthru("/usr/local/bin/createkeys.sh $awsid");

变量 $output 永远不会有你的输出。您需要将其更改为:

$output="";
passthru("/usr/local/bin/createkeys.sh $awsid", $output);

添加你给的命令参数是错误的,因为你给createkeys.sh,字符串“$awsid”作为参数而不是变量$awsid的值。

也一样
 echo "<pre>$output</pre>";

您正在回显一个字符串。 尝试将您的脚本更改为:

$awsid  = $_POST["aws_id"];
$output = "";
passthru("/usr/local/bin/createkeys.sh ".$awsid, $output);
echo "<pre>".$output."</pre>";

【讨论】:

  • 嗨丹尼尔!它给了我一个有趣的输出。输出只是数字 0。没有别的。我希望在这里看到终端输出。
  • 好吧,至少你知道 passthru 确实运行 createkeys.sh 因为它将 $output 从空字符串更改为 0,但你不会看到终端输出(我不确定是什么你的意思是),你应该看到 createkeys.sh 的输出。
猜你喜欢
  • 2016-05-13
  • 2019-02-22
  • 1970-01-01
  • 1970-01-01
  • 2013-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多