【问题标题】:dynamically display results/output in php/html web在 php/html web 中动态显示结果/输出
【发布时间】:2016-02-20 16:58:40
【问题描述】:

我使用以下命令通过 Web 界面向多台 Linux 计算机发送命令。 如果我选择 30 或 40 个客户端,我必须等待命令在所有客户端上运行,然后才能获得任何结果。 有没有办法在每台计算机上运行命令后立即开始列出结果?

<?php
  include('Net/SSH2.php');
  
  $user = "user";
  $pass = "pass";
  
  $ip = $_POST['clients'];
  $ssh = new Net_SSH2($ip);
  $cmds = $_POST['commands'];
 
  if(!empty($_POST['clients'])) {
      foreach($_POST['clients'] as $ip) {
          $ssh = new Net_SSH2($ip);
          if (!$ssh->login($user, $pass)) {exit('Login Failed');}
          echo "$ip: " . $ssh->exec($cmds) . "<br>";
      }
  }
 ?>
<form action="phpseclib/commands.php" method="post" target="main">
    <input type="checkbox" name="clients[]" value="192.168.0.51">Client001<br>
    <input type="checkbox" name="clients[]" value="192.168.0.52">Client002<br>
    <input type="checkbox" name="clients[]" value="192.168.0.53">Client003<br>
    <input type="checkbox" name="clients[]" value="192.168.0.54">Client004<br>
    <input type="checkbox" name="clients[]" value="192.168.0.55">Client005<br>
    <br/>
  	<select name="commands">
                  <option value="">Select Command</option>
 		<option value="uptime | sed 's/.*up \([^,]*\), .*/\1/'">Uptime</option>
 		<option value="printf $(free | grep -e-/+ | awk '{print $3/($3+$4) * 100.0 ''}' | cut -d '.' -f1)%%">Memory Usage</option>
     </select>
  <br>
  <br/>
  <input type="submit" value="Submit" />
  </form>

【问题讨论】:

    标签: php html web


    【解决方案1】:

    您可以使用 AJAX 请求,而不是依赖表单中的 POST 数据。每次选择客户端时,都会发送一个异步请求并将更新包含在浏览器中。

    关于安全性的简要说明,您是否允许从浏览器注入 shell 命令?如果这些input 选项值的内容被毫无疑问地执行,那么用户可以在其中放置任何东西。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-08-15
      • 2012-12-07
      • 2017-03-14
      • 1970-01-01
      • 2010-11-14
      • 1970-01-01
      • 2022-12-10
      相关资源
      最近更新 更多