在 php/html Web 中动态显示结果/输出


dynamically display results/output in php/html web

我使用下面的方法通过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>

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

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