我正在尝试从Bash Script脚本执行一个简单的PHP。我从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发布于 2015-11-17 10:39:13
我认为您还必须更改txt文件的权限,以便apache (实际上正在执行脚本的用户)能够对其进行写入。
但是,在使用shell_exec()和更改权限时,很容易传递不想要的变量.
发布于 2015-11-17 10:48:13
当你说
echo $var1 $var2 $var3 > ./test.txt您正在echo var1、var2和var3到与运行它的脚本位于同一个目录的文件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。
最后,请注意it is recommendable to quote your vars。所以最好说:
echo "$var1 $var2 $var3" > test.txt
# ^ ^https://stackoverflow.com/questions/33754553
复制相似问题