2016-06-01 17 views
1

Ich habe ein großes Problem und ich kann keine Lösung finden. Ich habe derzeit ein PHP-Skript, das einen Webhook (HTTP POST) als Auslöser akzeptiert. Basierend auf den im POST enthaltenen Variablen soll ein exec ('python script') laufen und einige Variablen zurückgeben. Es funktioniert gut, wenn ich es von der Befehlszeile aus ausführen, es funktioniert gut, aber wenn ich versuche, das Skript von jedem Typ von HTTP-Anfrage auszulösen, wird die exec() -Funktion nicht ausgeführt. Hier ist der Code-Abschnitt, der betroffen ist:Wie kann ich shell_exec() von PHP Webhook aufrufen?

$command = shell_exec('python C:\\xampp\\cgi-bin\\SECpull.py'); 

$company_dump = print_r($command, TRUE); 
$fp = fopen('retvals.txt', 'w'); 
fwrite($fp, $company_dump); 
fclose($fp); 

Wenn es nicht möglich ist, eine exec() Funktion in einem PHP-Skript zu haben, die von einer HTTP-POST getriggert wird, dann, wie soll ich über diese gehen?

+0

Es ist durchaus möglich, und es ist nichts falsch mit Ihrem Code (das asterix unter der Annahme ist ein Tippfehler). Es ist wahrscheinlich, dass der Benutzer, der Ihren Webserver ausführt, keine Berechtigung zum Ausführen des Befehls besitzt. Sie können dies über die Befehlszeile testen, indem Sie das Skript als diesen Benutzer anstelle des Standardskripts ausführen. Ich weiß nicht, wie man es unter Windows macht, aber auf einem Unix-System wäre es so etwas wie 'sudo -u apache php myscript.php' (wenn' apache' deinen Webserver betreibt) –

+0

Die Sternchen waren ein Versuch zu Markieren Sie diese Zeile als den Fokus in meinem Skript. Ich werde das beheben, um Verwirrung zu beseitigen. – Samson

+0

So viele Dinge können hier schiefgehen. Es wird nützlicher sein, wenn Sie den Fehler, den Sie sehen, posten könnten. shell_exec ist keine sichere Methode. Warum nicht eine reine PHP-Lösung oder eine reine Python-Lösung statt mischen? – middlestump

Antwort

0

Problem

Wie Robbie Averill erwähnt, wahrscheinlich eine Genehmigung Problem haben, und Sie können das Problem beheben, indem Sie zusätzliche Berechtigungen für Benutzer, die den Web-Server laufen verwendet wird. Allerdings denke ich, es ist kein guter Stil, mit zu mischen, und wenn Sie SECpull.py nicht zu umschreiben können, dann tun Sie alles besser in .

Ich empfehle Ihnen, Flask dafür zu verwenden.

Probe

# server.py 
from flask import Flask 
app = Flask(__name__) 

# Setup custom route here 
@app.route("/") 
def index(): 
    # Add SECpull.py logic here. 
    return "Welcome To Python Server!" 

if __name__ == "__main__": 
    app.run() 

Setup-

$ pip install Flask 
$ python server.py 

* Running on http://localhost:5000/