Script per PHP von Localhost ausführen

L I V E Stammtisch ab 20:30 Uhr im Chat
  • Hallo Zusammen,

    ist es möglich ein Script auf dem Pi via PHP auszuführen?

    • das PHP-Script läuft auf einem Server im LAN (Xampp).
    • der Pi hat eine feste IP-Adresse
    • Das Script auf dem Pi ist im Root-Verzeichnis und heist "refresh.sh"


    Grüße
    Schmakus

  • nein, mit z.B. curl rufst du "http(s)://192.168.1.100/triggerRefresh.php" auf und darin steht dann <?php exec("refresh.sh");?>
    Damit nutzt du keine Verbindung zum Raspberry die eine Anmeldung erfordert, das ist ein riesiger Sicherheitsgewinn in diesem Kontext und die wesentlich schönere Lösung.


  • nein, mit z.B. curl rufst du "http(s)://192.168.1.100/triggerRefresh.php" auf und darin steht dann <?php exec("refresh.sh");?>
    Damit nutzt du keine Verbindung zum Raspberry die eine Anmeldung erfordert, das ist ein riesiger Sicherheitsgewinn in diesem Kontext und die wesentlich schönere Lösung.

    Hi,

    habe nun Lighttpd inkl. PHP5 installiert.


    dann folgendes erledigt:

    Code
    sudo nano /etc/sudoers
    Code
    www-data ALL=(ALL) NOPASSWD: ALL

    Das Shellscript "refresh.sh" liegt im root Verzeichnis und hat folgenden Inhalt:

    Code
    export DISPLAY=:"0.0"
    XAUTHORITY=/home/pi/.Xauthority
    xdotool getactivewindow
    xdotool key F5

    Das PHP Script liegt in /var/www/html/refresh.php und hat folgenden Inhalt:

    PHP
    <?php
    shell_exec("sh .../.../.../refresh.sh");
    echo "Reload durchgeführt";
    ?>

    Wenn ich nun das PHP Script über die Konsole wie folgt ausführe, wird die aktuelle Website im Iceweasel neu geladen:

    Code
    php /var/www/html/refresh.php

    Wenn ich aber via externen Browser das Script aufrufe, bekomme ich zwar das ECHO aber die Website auf dem Raspberry wird nicht neu geladen.

    Code
    http://192.168.3.32/refresh.sh

    Wieso???

  • Fangen wir vorne an:
    * Den Eintrag aus der sudoers wieder raus, der ist maximal böse.
    * Das Shellscript raus aus dem root-Verzeichnis. Da gehört NICHTS rein als die vorhandenen Ordner, leg das entweder in /home/pi/ oder in /var/www/html/ (oder Tiefer innerhalb dieser Ordner). Also entweder in den Benutzerordner oder direkt zu dem Rest des Systems (also in diesem Fall dem PHP-Script), nicht einfach irgendwohin.
    * Mache mal etwas einfaches in dem script (z.B. 'echo "test" > test.txt') und gucke ob das ganze generell funktioniert
    * Funktioniert das refresh wenn du es direkt aufrufst?
    * Verwende NICHT shell_exec, wie kommst du darauf? Verwende exec wie ich geschrieben habe, denn das verrät dir auf Wunsch auch, was nciht funktioniert:

    Code
    shell_exec("./refresh.sh", $output, $return);
    if (!$return) {
    echo $output;
    }

    Und wer lesen kann ist klar im Vorteil (geht an mich selbst).
    Wenn die "website" von der Konsole aus aufgerufen funktioniert, dann ist das ein Rechteproblem. Aber mir ist im ersten Moment nicht klar welches. Daher wäre der output sehr interessant. Da steht dann drinn, welcher Schritt nicht erlaubt war.

    Einmal editiert, zuletzt von Horroreyes (25. September 2015 um 09:40)

  • Also, mein PHP sieht wie folgt aus:

    Wenn ich nun das Script wie folgt aufrufe, funktioniert der Reload:

    Code
    php /var/www/refresh.php

    Wenn ich über den Browser "http://raspi/refresh.php" aufrufe kommt folgende Meldung:

    Zitat

    [color=FF0000][font="Arial, Helvetica, sans-serif"]ERROR: [/font][/color][color=009900][font="Arial, Helvetica, sans-serif"]General Error (Miscellaneous errors, such as 'divide by zero' and other impermissible operations)[/font][/color]

    Wenn ich in die Error-Log von Apache schaue, sehe ich folgenden Eintrag:

    Code
    No protocol specified
    Error: Can't open display: (null)
    Failed creating new xdo instance

    Das ist der Selbe Fehler, wie wenn ich mit der Konsole das PHP-Script mit "sudo" ausführe (ohne SUDO gehts?!)

    Code
    pi@raspi ~ $ sudo php /var/www/refresh.php
    No protocol specified
    Error: Can't open display: (null)
    Failed creating new xdo instance
    No protocol specified
    Error: Can't open display: (null)
    Failed creating new xdo instance

    Einmal editiert, zuletzt von Schmakus (25. September 2015 um 10:49)

  • Das macht Sinn.
    Du willst vom aktuellen Benutzer die Einstellungen laden, mit sudo (also als root) sind die Einstellungen natürlich roots Einstellungen, per Website sind das die Einstellungen von www-data.
    In dem Moment wo das xdotool losgeht hört meine Ahnung leider auf, könnte da jemand anders einspringen? bis dahin scheint es zu funktionieren.

    Kleine Anmerkung:
    XAUTHORITY=../../home/pi/.Xauthority
    das brauchst du nciht anzupassen.
    XAUTHORITY=/home/pi/.Xauthority
    reicht aus. / am Anfang eines Pfades bezieht sich immer auf das Wurzelverzeichnis (/)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!