首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法从PHP执行Bash脚本

无法从PHP执行Bash脚本
EN

Stack Overflow用户
提问于 2015-11-17 10:26:20
回答 2查看 572关注 0票数 7

我正在尝试从Bash Script脚本执行一个简单的PHP。我从HTML5前端页面收集数据,通过ajax传递到PHP,获取变量,然后将这些变量传递给.sh脚本,但是我收到了如下消息:

代码语言:javascript
复制
./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

代码语言:javascript
复制
<?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代码:

代码语言:javascript
复制
#!/bin/bash

var1=$1;
var2=$2;
var3=$3;

echo "$var1";
echo "$var2";
echo "$var3";

echo $var1 $var2 $var3 > ./test.txt
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-11-17 10:39:13

我认为您还必须更改txt文件的权限,以便apache (实际上正在执行脚本的用户)能够对其进行写入。

但是,在使用shell_exec()和更改权限时,很容易传递不想要的变量.

票数 2
EN

Stack Overflow用户

发布于 2015-11-17 10:48:13

当你说

代码语言:javascript
复制
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。为此,请将写入权限更改为该文件,以便“其他人”(即用户wwwapache)可以写入该文件:

代码语言:javascript
复制
chmod o+w /var/www/test.txt

或者,更好的是,写到另一个目录中。例如,/tmp

最后,请注意it is recommendable to quote your vars。所以最好说:

代码语言:javascript
复制
echo "$var1 $var2 $var3" > test.txt
#    ^                 ^
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33754553

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档