无法从 PHP 执行 Bash 脚本

Cannot execute Bash script from PHP

我正在尝试从 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=;
var2=;
var3=;

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

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

我相信您还必须更改 txt 文件的权限,以便 apache(实际执行脚本的用户)能够写入它。

尽管在使用 shell_exec() 和更改权限时要小心,但很容易传递不需要的变量...

当你说

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: line 13: ./test.txt: Permission denied

这是在告诉您,您不能写入文件 /var/www/test.txt。为此,请更改此文件的写入权限,以便 "others"(即用户 wwwapache)可以写入该文件:

chmod o+w /var/www/test.txt

或者,写入另一个目录可能更好。例如 /tmp.

最后,注意。所以最好说:

echo "$var1 $var2 $var3" > test.txt
#    ^                 ^