2017-10-30 7 views
0

Ich möchte eine LED über eine Website (index.php), die in "/var/www/html" befindet die zwei Skripts befinden sich in "/var/www/html/wspace/Server/" befinden. Beide Skripte funktionieren einwandfrei, wenn ich sie mit ssh ausführe, aber ich kann sie nicht über meine PHP-Datei ausführen.PHP Python-Skript ausführen

In meinem index.php schrieb ich den folgenden Code für On-/off.py:

exec("/usr/bin/python3.5 /wspace/Server/on.py"); 

(.. Ich mit which python3.5 die Python-Installation Die Antwort war /usr/bin/python3.5)

Ich habe keine Ahnung was falsch ist. Ist es der Befehl selbst oder muss ich etw. Ändern? im Apache? Was muss geändert werden, damit es funktioniert?

Als weitere Informationen der Eigentümer und Berechtigungen der Dateien:

index.php pi:pi 777 
on.py pi:pi 777 
off.py pi:pi 777 
+0

'sudo' ist (Gott, ich hoffe) auffordert, Anmeldeinformationen – Kisaragi

+0

Bitte führen mit zusätzlichen Parametern für Ausgabe und Rückgabewert, und überprüfen Sie sie: 'exec (" ... ", $ output, $ r); var_dump ($ output, $ r) '; – sidyll

Antwort

1

Der Apache-Benutzer ist wahrscheinlich „www-data“, die es nicht, hoffentlich, sudo Zugang haben. Auch mehrere Wörter in exec können komisch wirken, ich weiß es nicht. exec() kann nicht einmal bash ausführen, so dass Dinge wie "& &" nicht funktionieren.

Put

#!/usr/bin/python3 

als die erste Zeile des Python-Skript und

$chmod +x on.py 

Dann

exec("/var/www/html/wspace/Server/on.py") 

hier relativ Wegfindung Verwendung ist keine gute Idee sei es, weil Sie don Ich weiß nicht, was das Arbeitsverzeichnis ist, obwohl ich sicher bin, dass es spezifiziert werden kann.

Wenn dies immer noch nicht funktioniert, dann sind die Umgebungsvariablen wahrscheinlich der Schuldige, und Sie werden etwas in Richtung "unbekannte Umgebung: python3" sehen. Ich zitiere hier aus der Erinnerung, also könnte ich weg sein. Wenn dies der Fall ist, müssen Sie ein Bash-Skript aufrufen, das PATH exportiert. Sie können an der Box anmelden und echo $ PATH als normaler Benutzer, keine Rolle für diesen Fall und dann würde die Bash-Skript sein:

#!/bin/bash 
export PATH=$PATH:<the stuff from 'echo $PATH'> 
/var/www/html/wspace/Server/on.py 

Vergessen Sie nicht, das ausführbare Bit auf dafür drehen Skript entweder chmod + x

Schließlich Ihre PHP würde das oben bash-Skript aufrufen:

exec("<full path to bash script>") 

Es ist wichtig zu erkennen, dass in allen wahrscheinlich Haube das Argument übergeben wird exec nicht unter der bash-Interpreter ausgeführt werden also muss das oben genannte in einem eigenständigen Skript getan werden.

0

Ich hatte das gleiche Problem vor einer Weile.

In diesem Szenario müssen Sie berücksichtigen, wo sich die Skripts relativ zur ausführenden Datei befinden. Im Moment sind Sie mit einem Schrägstrich vorangestellt, so dass es von einem absoluten Pfad aus dem Wurzelverzeichnis aussieht. Wenn Sie das entfernen, wird es relativ aussehen und sollte funktionieren.

Auch ich fand, ich musste den gesamten Pfad bei der Ausführung von Python enthalten. E.

g

exec('/usr/local/bin/python3 wspace/Server/on.py')

Wenn dies immer noch nicht funktioniert, versuchen Sie das Verzeichnis wechseln und dann die Datei ausgeführt wird:

exec('cd wspace/Server && /usr/local/bin/python3 on.py')

+0

Nun, ich habe Ihre Vorschläge ausprobiert. Es funktioniert nicht. Ich habe ein weiteres on.py Skript im selben Verzeichnis wie index.php gemacht, auch das hat nicht funktioniert. – AlwaysLearning

+0

Haben Sie überprüft, dass der Pfad zu python3 auf Ihrem System derselbe ist wie im Beispiel? – Ian

+0

Ja, ich habe gesehen, dass es python3.5 ist, das ich benutze. Also habe ich es mit python3 und python3.5 getestet, aber es funktioniert immer noch nicht. – AlwaysLearning