Probleme beim aufrufen von Python script über PHP

  • Guten Abend allerseits,

    Ich versuche ein ganz normales python script über eine php zu öffnen, doch es funktioniert nicht.

    Ich benutze den apache2 Webserver.

    Lokal und über eine SSH Verbindung funktioniert das .py script super, aber wie gesagt sobald ich es über den Webserver versuche Klappt es nicht.

    Hätte jemand ne Idee ?

    Danke im Voraus :)

    PHP: script.php
    <?php
    echo shell_exec('sudo python /var/www/html/ledschule.py');
    header("Location:index.html");
    ?>

    Edited once, last by pibot ().

    • Official Post

    Hallo pibot,


    willkommen im Forum!


    Um es gleich auf den Punkt zu bringen: der User www-data (Apache) darf kein sudo verwenden. In einer "normalen"/frisch installierten Raspbian-Umgebung haben nur root selbst und pi mittels sudo root-Rechte.


    Mittels SSH funktioniert es, weil Du das Script als pi ausführst. ;)


    Du hast mehrere Möglichkeiten, von denen ich Dir zwei davon empfehlen würde.

    Die erste Möglichkeit wäre ein sudo-Webscript erstellen. Wie das geht hat meigrafd mal hier beschrieben: Sudo Befehle mit PHP absetzen


    Die andere Möglichkeit wäre diese: [Python] Anleitung: Webserver, Websocket und ein bisschen AJAX


    Wenn es sich um ein grösseres Webprojekt handelt und das der einzige Aufruf eines Scriptes ausserhalb von PHP ist, dann würde ich persönlich vorerst die erstere Möglichkeit bevorzugen...

  • Die dritte Möglichkeit ist das verruchte chmod 777 - nicht zu empfehlen.

    Die vierte Möglichkeit ist das run as user Bit mit chmod - nicht zu empfehlen.
    Die fünfte Möglichkeit ist Freigabe der Dateirechte durch den Eigentümer (oder root) an einen anderen User.


    Soll auf /var/www/html/ledschule.py, das dem User www-data gehört, auch vom user pi lesend und schreibend zugegriffen werden, so kann www-data (oder root) mit < setfacl -m u:pi:rw /var/www/html/ledschule.py > diese Rechte dem User pi über eime ACL einräumen.

    Siehe < man acl >, <man setfacl >, < man getfacl >.



    Servus !

    RTFM = Read The Factory Manual, oder so