Je nachdem, was Sie tun, ist system () oder popen () möglicherweise perfekt. Verwenden Sie system (), wenn das Python-Skript keine Ausgabe hat oder wenn die Ausgabe des Python-Skripts direkt an den Browser gesendet werden soll. Verwenden Sie popen (), wenn Sie Daten in die Standardeingabe des Python-Skripts schreiben oder Daten aus der Standardausgabe des Python-Skripts in PHP lesen möchten. Mit popen () können Sie nur lesen oder schreiben, nicht jedoch beide. Wenn Sie beides möchten, lesen Sie proc_open (). Bei der bidirektionalen Kommunikation zwischen Programmen müssen Sie jedoch darauf achten, Deadlocks zu vermeiden, bei denen jedes Programm darauf wartet, dass das andere etwas unternimmt .
Wenn Sie vom Benutzer bereitgestellte Daten an das Python-Skript übergeben möchten, müssen Sie unbedingt die Befehlsinjektion beachten. Wenn Sie nicht vorsichtig sind, kann Ihr Benutzer Ihnen Daten wie "; evilcommand;" senden. und lassen Sie Ihr Programm beliebige Befehle gegen Ihren Willen ausführen.
Escapeshellarg () und Escapeshellcmd () können dabei helfen, aber ich persönlich möchte alles, was kein guter Charakter ist, mit so etwas entfernen
preg_replace('/[^a-zA-Z0-9]/', '', $str)
Mit dem Backquote-Operator können Sie auch Python-Skripte mit einer ähnlichen Syntax wie oben ausführen
In einer Python-Datei namens python.py:
In einer PHP-Datei namens python.php:
quelle
Es gibt auch eine PHP-Erweiterung: Pip - Python in PHP , die ich noch nie ausprobiert habe, aber für einen solchen Anlass mit einem Lesezeichen versehen habe
quelle
Sie können ein Python-Skript über PHP ausführen und im Browser ausgeben.
Grundsätzlich müssen Sie das Python-Skript folgendermaßen aufrufen:
Hinweis: Wenn Sie time.sleep () in Ihrem Python-Code ausführen, werden die Ergebnisse nicht im Browser ausgegeben.
Vollständige Codes finden Sie unter So führen Sie Python-Skripte von PHP aus und zeigen die Ausgabe im Browser an
quelle
tempmon
und der gleiche Ordner enthält mein Python-Skript. Ich möchte, dass die Anwendung portabel ist, also kann ich einfach dentempmon
Ordner unter kopierenhtdocs
. Und das gleiche sollte auf verschiedenen Maschinen funktionieren.Ich mache so etwas die ganze Zeit für schnelle und schmutzige Skripte. Es ist durchaus üblich, ein CGI- oder PHP-Skript zu haben, das nur system / popen verwendet, um ein externes Programm aufzurufen.
Seien Sie besonders vorsichtig, wenn Ihr Webserver für das Internet geöffnet ist. Stellen Sie in diesem Fall sicher, dass Sie Ihre GET / POST-Eingabe bereinigen, damit Angreifer keine beliebigen Befehle auf Ihrem Computer ausführen können.
quelle
Ihre call_python_file.php sollte folgendermaßen aussehen:
Dadurch wird das Python-Skript ausgeführt und das Ergebnis an den Browser ausgegeben. In Ihrem Python-Skript bringt die Variable (sys.argv [1:]) alle Ihre Argumente ein. So zeigen Sie das Argument als Zeichenfolge für jeden Ort an, an dem Ihr PHP abruft. Wenn Sie also einen Textbereich erstellen möchten:
quelle
Beachten Sie, dass Sie bei Verwendung einer virtuellen Umgebung (wie beim Shared Hosting) Ihren Pfad zu Python anpassen müssen, z.
/home/user/mypython/bin/python ./cgi-bin/test.py
quelle
Die obigen Methoden scheinen komplex zu sein. Verwenden Sie meine Methode als Referenz.
Ich habe diese beiden Dateien
Hier habe ich eine HTML-Seite erstellt, die die Schaltfläche GO enthält. Wenn Sie diese Taste drücken, wird ein neuer Ordner in dem Verzeichnis erstellt, dessen Pfad Sie angegeben haben.
quelle
Wenn Sie Ihr Python-Skript in PHP ausführen möchten, müssen Sie diesen Befehl in Ihrem PHP-Skript ausführen:
quelle
your
mit den Parameternscript
und aufzurufenpython.py
. b) Sofern das Python-Skript keinen richtigen Shebang hat, muss der Python-Interpreter aufgerufen und der Skriptname an ihn übergeben werden (python script.py
). Selbst mit einem richtigen Shebang ist dies falsch, da Sie dann anrufen würden,./script.py
anstatt den Namen des Dolmetschers zu verwenden.