ajax — не может выполнить скрипт Bash из переполнения стека

Я пытаюсь выполнить простую 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

7

Решение

Я считаю, что вы должны изменить права доступа к txt-файлу также, чтобы apache (пользователь, который на самом деле выполняет скрипт) мог писать в него.

Будьте осторожны при использовании shell_exec() и изменяя права, довольно легко передавать нежелательные переменные …

2

Другие решения

Когда вы говорите

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,

Наконец, обратите внимание, что желательно процитировать ваши переменные. Так что лучше скажи:

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

По вопросам рекламы [email protected]