无法从 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"(即用户 www
或 apache
)可以写入该文件:
chmod o+w /var/www/test.txt
或者,写入另一个目录可能更好。例如 /tmp
.
最后,注意。所以最好说:
echo "$var1 $var2 $var3" > test.txt
# ^ ^
我正在尝试从 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"(即用户 www
或 apache
)可以写入该文件:
chmod o+w /var/www/test.txt
或者,写入另一个目录可能更好。例如 /tmp
.
最后,注意
echo "$var1 $var2 $var3" > test.txt
# ^ ^