我目前的做法是使用 PHP exec
<?php
$filename = "log.txt";
$text = $_POST['form'];
$fp = fopen ($filename, "w");
if ($fp) {
fwrite ($fp, $text);
fclose ($fp);
exec('/var/www/html/bash.sh');
header('Location: /next.html');
}
else {
echo ("ERROR.");
}
?>
所以我知道脚本至少在运行,因为它可以正常写入 log.txt,但据我所知,bash.sh 中实际上没有任何内容在运行。如果我在命令行上运行
“exec sudo bash /full/path/bash.sh”
然后它就可以正常执行了。我不确定这是权限错误还是其他什么。我做错了什么,还是有更好的方法?在此先感谢您的帮助。
答案1
这里至少存在三个问题:
- 代码将表单内容写入名为
log.txt
(在某个未知目录中)的文件中,然后执行不相关的/var/www/html/bash.sh
- 代码运行时
/var/www/html/bash.sh
无需指定解释器,因此它依赖于脚本中的适当shebang(并且您的外部测试指定了解释器:sudo bash ...
- 该脚本使用服务器的 id(www-data 或类似的东西)运行,而不是使用 root 运行。