2015-11-17 1 views
7

Я пытаюсь выполнить простой сценарий Bash Script от PHP. Я собираю данные из HTML5 переднего конца страницы, проходят через ajax в PHP скрипт, возьмите переменные, а затем передать их в .sh сценарий, но у меня есть сообщения типа:Не удается выполнить скрипт Bash из PHP

./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 
+1

Это работает, если вы говорите 'echo $ var1 $ var2 $ var3>/tmp/test.txt'? Похоже, вы не можете писать в директории, где находится 'test.txt'. – fedorqui

+0

Да, теперь это работает. Спасибо! – Sergi

ответ

2

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

Будьте осторожны при использовании shell_exec() и изменение разрешений это довольно легко передать ненужные переменные ...

+0

Это сработало! Большое вам спасибо :) – Sergi

+0

Добро пожаловать :) @Sergi – orestiss

+1

будьте осторожны, хотя для '$ var = 'hello; rm -rf .'' или что-то подобное @Sergi – orestiss

1

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

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

Вы echo ING 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. Чтобы быть в состоянии сделать это, изменить права на запись в этот файл так, что «другие» (то есть, пользователь www или apache) можно записать в него:

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

Или, вероятно, лучше, написать в другой каталог. Например, /tmp.

Наконец, обратите внимание, что it is recommendable to quote your vars. Так лучше сказать:

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

Спасибо за ответ @fedorqui! Это тоже помогает! – Sergi