PHP HTML / "sudo /home/ ....." via Button

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo zusammen,
    ich als blutiger Anfänger tüttel jetzt schon seit Tagen mit einem Webinterface herum das einfach nicht laufen wil und ich habe jetzt absolut keinen Plan mehr woran es liegen könnte.

    ich habe, eigentlich aus einem fertigem Tutorial eine Webseite an meine Bedürnisse angepasst. Mit dieser Webseite sollen Funksteckdosen geschaltet werden.

    Die Webseite ist aufrufbar, lässt sich bedienen, nur passieren tut nichts. in der Errlog vom apache steht nichts und die auszuführenden Sudo Befehle sind in der Console getestet und für gut befunden worden :) aber es tut sich beim drücker der Tasten im Webformular rein gar nichts.

    Was übersehe ich ? :helpnew:

    [code=php]<!DOCTYPE html>
    <html>

    <head>
    <meta name="viewport" content="width=device-width" />
    <meta charset="UTF-8">
    <title>Jutil Pi</title>
    </head>
    <body>
    <div align="center">

    <body bgcolor=#82FA58>

    <b><span style="font-size:1.2em">JUTIL Pi</span></b>

    </br>
    </br>
    <b>Beleuchtung</b> </br>
    </br>
    <form method="get" action="pi.php">
    <input type="submit" value="Ein" name="Beleuchtung" style="height: 50px; width: 75px;">
    <b>. . .</b>
    <input type="submit" value="Aus" name="Beleuchtungaus" style="height: 50px; width: 75px;">
    </form>
    </br>


    <b>Fernseher</b> </br>
    </br>
    <form method="get" action="pi.php">
    <input type="submit" value="Ein" name="TV" style="height: 50px; width: 75px;">
    <b>. . .</b>
    <input type="submit" value="Aus" name="TVaus" style="height: 50px; width: 75px;">
    </form>
    </br>


    <b>Alle</b></br>
    </br>
    <form method="get" action="pi.php">
    <input type="submit" value="Ein" name="Alles" style="height: 50px; width: 75px;">
    <b>. . .</b>
    <input type="submit" value="Aus" name="Allesaus" style="height: 50px; width: 75px;">
    </form>
    </br>


    <?php

    if(isset($_GET['Beleuchtung'])){
    exec("sudo /home/pi/raspberry-remote/./send 11010 1 1");
    }

    if(isset($_GET['Beleuchtungaus'])){
    exec("sudo /home/pi/raspberry-remote/./send 11010 1 0");
    }

    if(isset($_GET['TV'])){
    exec("sudo /home/pi/raspberry-remote/./send 11010 2 1");
    exec("sudo /home/pi/raspberry-remote/./send 11010 3 1");
    }

    if(isset($_GET['TVaus'])){
    exec("sudo /home/pi/raspberry-remote/./send 11010 4 1");
    }

    if(isset($_GET['Alle'])){
    exec("sudo /home/pi/raspberry-remote/./send 11010 2 1");
    exec("sudo /home/pi/raspberry-remote/./send 11010 3 1");
    }

    if(isset($_GET['Alleaus'])){
    exec("sudo /home/pi/raspberry-remote/./send 11010 2 1");
    exec("sudo /home/pi/raspberry-remote/./send 11010 3 1");
    }

    ?>

    </div>
    </body>
    </html>[/php]

    • Offizieller Beitrag

    Das wird an einem permission denied scheitern, da die sudo Befehle vom user www-data ausgeführt werden, welches das nicht darf. Forensuche -> sudoers ;)

    Der Unterschied zwischen Genie und Wahnsinn definiert sich im Erfolg.

  • www-data habe ich die rechte zugewiesen

    Code
    sudo chmod g+s /var/www
    sudo chmod 775 /var/www
    sudo chown -R www-data:www-data /var/www
    Code
    www-data ALL=NOPASSWD: ALL

    Unter visudo ist auch gesetzt

    Einmal editiert, zuletzt von JT179 (29. Oktober 2014 um 18:03)

  • Hey JT179,

    ich stand vorige Woche vor dem gleichen Problem, und habe es so nicht ans laufen bekommen.
    Beim rum experimentieren mit Skripten, ist mir dann aufgefallen dass man über einfache Shell Skripte im Verzeichnis /var/www solche Dinge hin bekommt.
    So habe ich dann ein Verzeichnis "Skript" angelegt und die Skripte ausführbar gemacht. Danach brauchte ich nur noch als exec das Skript mit der jeweiligen Funktion ausführen.
    Einziges Problem hatte ich mit "Daemon" & service ... start/stop.
    Das Problem ist mittlerweile auch gelöst.

  • --> Nützliche Links / Linksammlung --> Befehle über PHP mit root Rechten ausführen


    Anstatt GET zu verwenden würde ich lieber POST nutzen

    Du öffnest 2x einen <body tag, das ist nicht sonderlich toll, ein mal muss reichen.

    </br> schreibt man seit Web.20 eigentlich so: <br/>

    Der . vor dem /send ist überflüssig da du den vollständigen Pfad angibst. Dann wäre aber auch ein / zu viel..

    vom exec(); kannst du dir mögliche Fehlermeldungen zurückgeben lassen, siehe dazu Befehle über PHP mit root Rechten ausführen

    Du hast im letzten form " Alles " stehen aber beim dazugehörigen $_GET prüfst du auf " Alle " , da fehlt das s , auch " Alleaus " anstatt " Allesaus "


    Probiers mal hiermit:
    [code=php]
    <!DOCTYPE html>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <title>Jutil Pi</title>
    </head>
    <body bgcolor="#82FA58">
    <div align="center">

    <b><span style="font-size:1.2em">JUTIL Pi</span></b>

    <br/>
    <br/>
    <b>Beleuchtung</b>
    <br/>
    <br/>
    <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
    <input type="submit" value="Ein" name="Beleuchtung" style="height: 50px; width: 75px;">
    <b>. . .</b>
    <input type="submit" value="Aus" name="Beleuchtung" style="height: 50px; width: 75px;">
    </form>
    <br/>


    <b>Fernseher</b>
    <br/>
    <br/>
    <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
    <input type="submit" value="Ein" name="TV" style="height: 50px; width: 75px;">
    <b>. . .</b>
    <input type="submit" value="Aus" name="TV" style="height: 50px; width: 75px;">
    </form>
    <br/>


    <b>Alle</b>
    <br/>
    <br/>
    <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
    <input type="submit" value="Ein" name="Alles" style="height: 50px; width: 75px;">
    <b>. . .</b>
    <input type="submit" value="Aus" name="Alles" style="height: 50px; width: 75px;">
    </form>
    <br/>

    <?php
    if (!empty($_POST)) {
    foreach ($_POST AS $arg => $var) {
    if ($arg == "Beleuchtung") {
    if ($var == "Ein") {
    exec("sudo /home/pi/raspberry-remote/send 11010 1 1", $output, $return_var);
    } else if ($var == "Aus") {
    exec("sudo /home/pi/raspberry-remote/send 11010 1 0", $output, $return_var);
    }
    }
    if ($arg == "TV") {
    if ($var == "Ein") {
    exec("sudo /home/pi/raspberry-remote/send 11010 2 1", $output, $return_var);
    exec("sudo /home/pi/raspberry-remote/send 11010 3 1", $output, $return_var);
    } else if ($var == "Aus") {
    exec("sudo /home/pi/raspberry-remote/send 11010 4 1", $output, $return_var);
    }
    }
    if ($arg == "Alles") {
    if ($var == "Ein") {
    exec("sudo /home/pi/raspberry-remote/send 11010 2 1", $output, $return_var);
    exec("sudo /home/pi/raspberry-remote/send 11010 3 1", $output, $return_var);
    } else if ($var == "Aus") {
    exec("sudo /home/pi/raspberry-remote/send 11010 2 1", $output, $return_var);
    exec("sudo /home/pi/raspberry-remote/send 11010 3 1", $output, $return_var);
    }
    }
    }
    if (isset($return_var) AND $return_var >= 1) {
    echo "ERROR: <br/>\n";
    echo exitcode($return_var)."<br/>\n";
    } else if (isset($output) AND !empty($output)) {
    foreach($output AS $line) { echo $line."<br/>\n"; }
    }
    }

    function exitcode($code) {
    $ReturnCode['0'] = "Successful";
    $ReturnCode['1'] = "General Error (Miscellaneous errors, such as 'divide by zero' and other impermissible operations)";
    $ReturnCode['2'] = "Incorrect Usage";
    $ReturnCode['126'] = "Command found but not executable (Permission problem)";
    $ReturnCode['127'] = "Command not found (Possible problem with PATH or a typo)";
    $ReturnCode['128'] = "Invalid argument to exit (exit takes only integer args in the range 0 - 255)";
    $ReturnCode['130'] = "Script terminated by Control-C";
    return $ReturnCode[$code];
    }
    ?>

    </div>
    </body>
    </html>
    [/php]..das ist ein bisschen umgeschrieben, sollte aber besser zu handhaben sein :)

  • Was wird dir nicht korrekt angezeigt?

    Mauszeiger oben an den Anfang des CODE-Blocks, Linke Maustaste gedrückt halten und bis ans Ende des CODE-Blocks ziehen, STRG+C drücken oder RechteMaustaste über der Markierung und Kopieren, PuTTY Fenster anwählen, nano öffnen, Rechtsklick zum einfügen, speichern, ansurfen ...

  • ab der Zeile
    [code=php]$var) { if ($arg == "Beleuchtung") { if ($var == "Ein") { exec("sudo /home/pi/raspberry-remote/send 11010 1 1", $output, $return_var); } else if ($var == "Aus") { exec("sudo /home/pi/raspberry-remote/send 11010 1 0", $output, $return_var); } } if ($arg == "TV") { if ($var == "Ein")........ bis zum Ende[/php]

    wird mir alles als Text angezeigt

    Einmal editiert, zuletzt von JT179 (29. Oktober 2014 um 20:39)

  • Falsch kopiert oder falsch eingefügt... Da du aber leider nichts genau beschreibst müsste man jetzt weiter Raten - wozu ich aber jetzt keine Lust zu hab

  • Ich denke schon, dass ich den Text richtig kopiert habe :)
    Aber wie ich bereits oben schrieb, ab besagtem Code wird mir der Rest nur noch als Text im Browser angezeigt.
    Sage trotzdem, vielen Dank für Deine Mühe, die Fusszeile kannst also wieder ändern ;)

  • Der Code wird bei mir korrekt angezeigt: http://raspberrypi.roxxs.org/pi.php
    (mal davon abgesehen das ich von dem Grün Augenkrebs krieg)

    Der Fehler muss also bei dir liegen... Wie gehst du vor um den Code von hier aus dem Forum auf deinen PI zu bringen?


    Mein Spruch in der Signatur ändert sich bei jedem Aufruf von alleine :fies:

  • Was soll ich machen meine Frau mag grün ;)
    Ich markiere den Text über den "alles markieren" Button
    Füge den kopierten Text dann in einem Textdokument ein ein welches ich als pi.php auf einem USB stick speichere.
    Ziehe die Datei dann von diesem auf dem Desktop des Pi und kopiere unter Zuhilfenahme der Konsole in den Ordner /var/www

    Hab da aber gerade eine Idee monemtchen mal ...

    Ne doch nicht, hatte vermutet das es ggf am Zeichensatz liegt, scheint aber nicht der Fall zu sein

    Einmal editiert, zuletzt von JT179 (29. Oktober 2014 um 21:36)

Jetzt mitmachen!

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