Cannot execute Bash script from PHP

I'm trying to execute a simple Bash Script from PHP script. I collect data from a HTML5 front end page, pass through ajax to the PHP script, take the variables and then, pass these to the .sh script, but I've got messages like:

./test_bash.sh: line 13: ./test.txt: Permission denied

I tried to change the permissions chmod 777 test_bash.sh , tried to modify the sudoers.d file, tried this: shell_exec("echo password_for_the_user | sudo -S command_to_execute"); ... but the Bash script can't write the test.txt file.

Here is my basic code, first the 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";
?>

Secondly, the Bash code:

#!/bin/bash

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

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

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

I believe you have to change the permissions on the txt file also in order for apache ( the user that is actually executing the script ) to be able to write to it.

Be careful though when using shell_exec() and changing permissions it is quite easy to pass unwanted variables...


When you are saying

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

You are echo ing var1, var2 and var3 into the file test.txt that lies in the same directory as the script that is running it.

So if you are in /var/www , doing echo $var1 $var2 $var3 > ./test.txt will be the same as saying echo $var1 $var2 $var3 > /var/www/test.txt .

The problem you are facing consists in this error:

./test_bash.sh: line 13: ./test.txt: Permission denied

This is telling you that you are not allowed to write into the file /var/www/test.txt . To be able to do so, change the write permissions to this file so that "others" (that is, user www or apache ) can write into it:

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

Or, probably better, write into another directory. For example /tmp .

Finally, note that it is recommendable to quote your vars. So better say:

echo "$var1 $var2 $var3" > test.txt
#    ^                 ^
链接地址: http://www.djcxy.com/p/30496.html

上一篇: 设计,访客用户导致过滤器链停止

下一篇: 无法从PHP执行Bash脚本