php - 如何让 PHP 调用 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 并点击提交时,它确实将我带到http://example.com/generate.php?ip=1.1.1.1
我调用 shell 脚本的方式有问题吗?任何输入将不胜感激。
谢谢大家的意见,原来只是selinux。禁用 selinux 解决了这个问题。由于这不是网络连接系统,因此禁用 selinux 不是问题。
解决方案
su -s /bin/sh apache -c "./script 1.1.1.1"
您正在使用 root 权限执行脚本。尝试与您的用户一起执行脚本并查看结果。您可能需要为文件添加权限。
此外,出于安全原因,默认情况下禁用exec功能。您可以尝试编辑配置文件。
php 错误日志文件也将有助于阅读。
除此之外,整个想法真的很糟糕。使用 GET 或 POST 的参数执行 shell 脚本可能会导致坏事......
推荐阅读
- python - Python html格式全部选择表格行
- reactjs - 由于“导入类型”导致 testcafe 编译失败 - 需要更新到 Typescript 3.8 版
- javascript - 在 Chrome 中处理夏威夷键盘的 Unicode 转义序列
- java - 声明一个单独的变量然后引用它是否比设置对新变量的引用花费更多的空间?
- jquery - 从jquery中的两个不同数组以json格式绑定
- javascript - 为什么当我在嵌套的 for 循环中对该数组进行切片时,它会进入无限循环?
- android - Android Studio - 为不同用户保存 TextView 值
- javascript - 单击某些按钮后,事件侦听器停止工作
- node.js - Axios GET请求后反应页面未更新
- javascript - 对我需要安装的所有东西使用“expo install”是否安全?