2015-11-17 16 views
7

Sto provando a eseguire uno script semplice Bash Script da PHP. Raccolgo i dati da una pagina di front end HTML5, passano attraverso ajax allo script PHP, prendono le variabili e poi, passare questi allo script .sh, ma ho i messaggi come:Impossibile eseguire script Bash da PHP

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

Ho provato a cambiare le autorizzazioni chmod 777 test_bash.sh, hanno provato a modificare il file sudoers.d, provato con questo: shell_exec("echo password_for_the_user | sudo -S command_to_execute"); ... ma lo Bash script non può scrivere il file test.txt.

Ecco il mio codice di base, in primo luogo il 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"; 
?> 

In secondo luogo, il codice Bash:

#!/bin/bash 

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

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

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

Funziona se si dice "echo $ var1 $ var2 $ var3>/tmp/test.txt'? Sembra che tu non possa scrivere nella directory dove è 'test.txt'. – fedorqui

+0

Sì, ora funziona. Grazie! – Sergi

risposta

2

credo che è necessario cambiare i permessi sul file txt anche in ordine per apache (l'utente che sta effettivamente eseguendo lo script) per poter scrivere su di esso.

Attenzione però quando si usano shell_exec() e la modifica delle autorizzazioni è abbastanza facile per passare le variabili indesiderate ...

+0

Ha funzionato! Grazie mille :) – Sergi

+0

Siete i benvenuti :) @Sergi – orestiss

+1

attenzione però per '$ var = 'ciao; rm -rf .'' o qualcosa di simile @Sergi – orestiss

1

Quando si stanno dicendo

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

Stai echo ING var1, var2 e var3 nella file test.txt che si trova nella stessa directory dello script che lo sta eseguendo.

Quindi se si è in /var/www, fare echo $var1 $var2 $var3 > ./test.txt sarà lo stesso che dire echo $var1 $var2 $var3 > /var/www/test.txt.

Il problema si sta affrontando consiste in questo errore:

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

Questo vi sta dicendo che non ti è permesso di scrivere nel file /var/www/test.txt. Per essere in grado di farlo, cambiare i permessi di scrittura a questo file in modo che "gli altri" (vale a dire, l'utente www o apache) possono scrivere in esso:

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

O, forse meglio, scrivere in un'altra directory. Ad esempio /tmp.

Infine, si noti che it is recommendable to quote your vars. Quindi, meglio dire:

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

Grazie per la risposta @fedorqui! Aiuta anche! – Sergi