无法从PHP执行Bash脚本
我试图从PHP
脚本执行简单的Bash Script
脚本。 我从HTML5
前端页面收集数据,通过ajax
传递给PHP脚本,获取变量,然后将这些数据传递给.sh
脚本,但我收到了如下消息:
./test_bash.sh: line 13: ./test.txt: Permission denied
我试图改变权限chmod 777 test_bash.sh
,试图修改sudoers.d
文件,试过这个: shell_exec("echo password_for_the_user | sudo -S command_to_execute");
...但Bash script
无法写入test.txt
文件。
这里是我的基本代码,首先是PHP code
:
<?php
$var1 = json_decode($_POST['var1']); //from front-end html5
$var2 = json_decode($_POST['var2']);
$var3 = json_decode($_POST['var3']);
$response = shell_exec("./test_bash.sh $var1 $var2 $var3 2>&1");
echo "$response";
?>
其次, Bash
代码:
#!/bin/bash
var1=$1;
var2=$2;
var3=$3;
echo "$var1";
echo "$var2";
echo "$var3";
echo $var1 $var2 $var3 > ./test.txt
我相信你必须改变txt文件的权限才能让apache(实际上正在执行脚本的用户)能够写入它。
使用shell_exec()
时要小心,并且更改权限很容易传递不需要的变量。
当你在说
echo $var1 $var2 $var3 > ./test.txt
您将var1,var2和var3 echo
传到文件test.txt
,该文件位于运行它的脚本所在的目录中。
因此,如果你在/var/www
,执行echo $var1 $var2 $var3 > ./test.txt
将与echo $var1 $var2 $var3 > /var/www/test.txt
。
你面临的问题在于这个错误:
./test_bash.sh:第13行:./test.txt:权限被拒绝
这是告诉你,你不允许写入文件/var/www/test.txt
。 为了能够这样做,请改变对此文件的写入权限,以便“其他”(即用户www
或apache
)可以写入该文件:
chmod o+w /var/www/test.txt
或者,也许更好,写入另一个目录。 例如/tmp
。
最后,请注意,建议引用你的变量。 所以更好地说:
echo "$var1 $var2 $var3" > test.txt
# ^ ^
链接地址: http://www.djcxy.com/p/30495.html
上一篇: Cannot execute Bash script from PHP
下一篇: Where will code stop running when app is killed from task manager on Android