Ob auf einem lokalen Server oder auf einem Webserver: Manchmal arbeitet man mit verschiedenen Programmen und Programmiersprachen zusammen. Mit PHP und Python geht das einfacher als mit Javascript: PHP und Python laufen beide zusammen auf dem Server, während Javascript erst im Browser ausgeführt wird. Hier lassen sich Daten nicht mehr so einfach an PHP oder Python zurück senden.
Python Code in PHP
Um Python-Code aus einem PHP Programm heraus auszuführen, kopiert man die Befehle in eine Datei mit der Dateiendung .py (falls man nicht bereits ein Python Programm vorliegen hat, dass man aus PHP ausführen möchte).
In unserem Beispiel ist dieser Python-Code in der Datei “/var/www/mein_skript.py” gespeichert. Somit kann man den Python Code so mit PHP aufrufen:
<?php
$code = escapeshellcmd('python /var/www/mein_skript.py');
$ergebnis = shell_exec($code);
echo $ergebnis;
?>
Die erste Zeile (escapeshellcmd) sorgt dafür, dass keine Sonderzeichen übergeben werden, die Probleme bereiten könnten: Das ist vor allem dann wichtig, wenn hier Daten von fremden Benutzern verarbeitet werden sollen (zum Beispiel ein User-Name als Dateiname).
Falls das Python-Skript eine Ausgabe zurückgibt, wird diese in der Variable $ergebnis gespeichert und lässt sich in der dritten Zeile mit dem Echo-Befehl ausgeben.
sudo python: Wenn man mehr Rechte braucht
Soll das Python Skript auf bestimmte Funktionen zugreifen, auf die PHP (oder der User www-data) keine Rechte besitzt, muss man dies aber zunächst ändern. Das ist zum Beispiel wichtig, wenn mit PHP ein Python Skript gestartet werden soll, das die GPIO Ports auf einem Raspberry Pi steuert!
Hier kann man zunächst den Befehl “sudo” in dem PHP Skript vor den Aufruf der Python-Datei setzen:
$code = escapeshellcmd('sudo python /var/www/mein_skript.py');
Damit das aber auch funktioniert, muss der User www-data in die Liste der sudoers eingetragen werden: Ansonsten hat er trotz sudo keine weiteren Rechte.
Dazu ruft man die Liste der sudo Berechtigtigen auf, in dem man sich mit dem Server verbindet (zum Beispiel per SSH):
sudo visudo
Jetzt gibt man dem User www-data zusätzliche Rechte für das Ausführen von unserem Python-Skript, indem man am Ende der Datei diese Zeile ergänzt:
www-data ALL=(ALL) NOPASSWD: /usr/bin/python /var/www/mein_skript.py
Dabei muss der Pfad zu dem Skript und eventuell zu dem Python Interpreter eventuell angepasst werden. Anschließend kann man mit PHP aber auch mit zusätzlichen Rechten auf das Python-Skript zugreifen.
Mit STRG + O speichert man die Änderungen an der sudoers Liste und beendet mit STRG + X den Nano Editor wieder.