如何使PHP调用Shell脚本?

时间:2018-10-04 14:55:03

标签: php bash shell

我有一个generate.php页面

<?php
exec("./script $ip");
?>

我已经验证了变量$ ip是从URL正确提取的。当它重定向到此页面时,它不会运行脚本。我还尝试验证该脚本适用于apache用户,并且确实可以。

su -s /bin/sh apache -c "./script 1.1.1.1"

从我的index.html页面设置IP的代码是这个

<form action="generate.php">
  <input type="text" name="ip" />
  <input type="submit" />
</form>

当我在框中输入IP并点击Submit时,确实将我带到http://example.com/generate.php?ip=1.1.1.1

我调用Shell脚本的方式有问题吗?任何输入将不胜感激。

谢谢您的所有投入,原来只是selinux。禁用selinux解决了此问题。由于这不是网络连接的系统,因此禁用selinux并不是问题。

2 个答案:

答案 0 :(得分:1)

  

su -s / bin / sh apache -c“ ./script 1.1.1.1”

您正在以root特权执行脚本。 尝试与用户一起执行脚本并查看结果。您可能需要向该文件添加权限。

默认情况下,出于安全原因, exec 功能也被禁用。您可以尝试编辑配置文件。

此外,php错误日志文件也将有助于阅读。

除此之外,整个想法真的很糟糕。使用GET或POST参数执行shell脚本可能会导致不良后果...

答案 1 :(得分:0)

您可以尝试以下方法:

<?php
if (isset($_GET['ip'])) {
    exec('./script ' + $_GET['ip']);
} else {
    exec("./script $ip");
}

如果提供的话,您将在URL中使用ip(例如:http://example.com/generate.php?ip=1.1.1.1),否则将使用以前的实现。