2015-11-17 5 views
7

nicht ausführen Ich versuche, eine einfache Bash Script von PHP Skript auszuführen. Ich sammle Daten von einer HTML5 Front-End-Seite, passieren ajax an den PHP-Skript, die Variablen nehmen und dann diese an die .sh Skript übergeben, aber ich habe Nachrichten wie:Kann Bash-Skript von PHP

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

Ich habe versucht, zu ändern die Berechtigungen chmod 777 test_bash.sh, versucht, die sudoers.d Datei zu ändern, versuchte dies: shell_exec("echo password_for_the_user | sudo -S command_to_execute"); ... aber die Bash script kann die Datei test.txt nicht schreiben.

Hier ist meine grundlegenden Code, zuerst die 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"; 
?> 

Zweitens, die Bash Code:

#!/bin/bash 

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

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

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

Funktioniert es, wenn Sie sagen: echo $ var1 $ var2 $ var3>/tmp/test.txt'? Es sieht so aus, als könnten Sie nicht in das Verzeichnis schreiben, in dem 'test.txt' steht. – fedorqui

+0

Ja, jetzt funktioniert es. Vielen Dank! – Sergi

Antwort

2

Ich glaube, Sie die Berechtigungen für die txt-Datei auch, um sich ändern müssen für Apache (der Benutzer, der das Skript tatsächlich ausführt), um in der Lage zu sein, zu schreiben.

Seien Sie vorsichtig, wenn shell_exec() mit und Ändern von Berechtigungen es ganz einfach ist es, unerwünschte Variablen zu übergeben ...

+0

Es hat funktioniert! Vielen Dank :) – Sergi

+0

Sie sind herzlich willkommen :) @Sergi – orestiss

+1

seien Sie vorsichtig, obwohl für '$ var = 'Hallo; rm -rf .'' oder etwas ähnliches @Sergi – orestiss

1

Wenn Sie sagen

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

Du echo ing var1, var2 und var3 in die Datei test.txt, die im selben Verzeichnis wie das Skript liegt, das es ausführt.

Wenn Sie also in /var/www sind, wird echo $var1 $var2 $var3 > ./test.txt das gleiche sein wie echo $var1 $var2 $var3 > /var/www/test.txt.

Das Problem Sie konfrontiert sind besteht in diesem Fehler:

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

Dies sagt Ihnen, dass Sie nicht /var/www/test.txt in die Datei zu schreiben, sind erlaubt. Um in der Lage zu sein, dies zu tun, auf diese Datei, um die Schreibberechtigungen so zu ändern, dass „andere“ (das heißt, Benutzer www oder apache) schreiben können, hinein:

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

Oder wohl besser, schreiben Sie in ein anderes Verzeichnis. Zum Beispiel /tmp.

Schließlich, beachten Sie, dass it is recommendable to quote your vars. Also besser sagen:

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

Danke für die Antwort @fedorqui! Es hilft auch! – Sergi