php下拉菜单用参数执行脚本

php下拉菜单用参数执行脚本

我有 shell 脚本,我像这样运行

/var/www/test.sh 2015

或者

/var/www/test.sh 2014

当这个脚本运行时,它实际上从 freeradius 获取数据并在 www 文件夹中生成特定年份的 gnuplot 基本图,例如

/var/www/output.jpg 

现在我想制作一个包含 2015 年、2014 年等年份的 php 下拉菜单,当用户选择任何年份时,它应该运行具有特定选择年份的脚本。但是我怎样才能将年份传递给 shell 脚本呢?

到目前为止我已经尝试过这个但它不起作用。

root@rm:/var/www# cat test5.php

<html>
<head><title>some title</title></head>
<body>
  <form method="post" action="">
    <input type="text" name="something" value="<?= isset($_POST['something']) ? htmlspecialchars($_POST['something']) : '' ?>" />
    <input type="submit" name="submit" />
  </form>

<?php
if(isset($_POST['submit'])) {
echo ($_POST['something']);
// Now the script should be executed with the selected year 
      $message=shell_exec("/var/www/test.sh $something");
// and after executing the script, this page should also open the output.jpg in the browser

}
?>
</body>
<html>
root@rm:/var/www#

答案1

html 中的下拉菜单是一个选择。

<form method="post" action="">
    <select name="something">
        <option value="2014">year 2014</option>
        <option value="2015">year 2015</option>
    </select>
    <input type="submit" name="submit" />
</form>

然后提交后

$something = $_POST["something"];
shell_exec("/var/www/test.sh $something");

答案2

允许 PHP 执行命令是危险的。有很多事情可能会阻止你实现你的目标 - SELinux、Apparmor、PHP 运行 chroot、PHP 在安全模式下运行、PHP 中的禁用功能......

为了确保代码仅有的做你想做的事,你需要验证输入

// Since value appears to be a numeric year, lets insist that its a number
$arg=(integer)$_POST['something']; 
// in an appropriate range
if ((1970<$arg) && (3000>$arg)) {
    // this part is redundant given the checks above but included for completeness
    $arg=escapeshellarg($arg);
    $message=shell_exec("/var/www/test.sh $something");
}

您的代码应该可以工作(尽管它非常不安全)。它不起作用的原因应该在您的日志文件中。

相关内容