PHP führt ungewollt Befehle aus

L I V E Stammtisch ab 20:30 Uhr im Chat
  • Hallo,
    ich hoffe ich bin hier im Richtigen Forum...
    Zu meinem Problem: Ich habe mir eine Website mit Apache erstellt und einige Befehle eingebaut, welche Python-Scripte ausführen, allerdings werden erst einmal alle Befehle beim Laden der Seite ausgeführt. Wie kann ich das vermeiden, dass beim neuladen der Website nicht einmal alle Befehle ausgeführt werden.
    zur Hilfe hier mein Quelltext:

  • Du hast in den Linktags <a> ja schon shell_exec Aufrufe.

    Sind die so gewollt? Bzw. welcher Befehl wird ausgeführt und soll nicht ausgeführt werden?

  • Anstatt Hyperlinks zu nutzen solltest du lieber ein <form action="" methode="get"> verwenden, also ein Formular. Denn so wie BennY bereits erwähnte wird /home/pi/motorl.py bereits beim laden der Seite ausgeführt da du das ja auch so eingebaut hast..

    Und gewöhn dir auch mal eine bessere Schreibweise an und verwende Einrückungen wo welche angebracht wären.

  • [code=php]
    <!DOCTYPE html>
    <html>
    <head>
    <title>Control</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    </head>
    <body>
    <?php
    if (!empty($_POST)) {
    foreach ($_POST AS $arg => $var) {
    if ($arg == "Motor") {
    if ($var == "oben") {
    exec('sudo /home/pi/motorl.py '.$var.'', $output, $return_var);

    } else if($var == "links") {
    exec('sudo /home/pi/motorl.py '.$var.'', $output, $return_var);

    } else if($var == "rechts") {
    exec('sudo /home/pi/motorl.py '.$var.'', $output, $return_var);

    } else if($var == "unten") {
    exec('sudo /home/pi/motorl.py '.$var.'', $output, $return_var);
    }
    } else if ($arg == "LEDon") {
    exec('/usr/local/bin/gpio -g write '.$var.' 0', $output, $return_var);

    } else if ($arg == "LEDoff") {
    exec('/usr/local/bin/gpio -g write '.$var.' 1', $output, $return_var);

    } else if ($arg == "Screenshot") {
    exec('/opt/vc/bin/raspistill -q 100 -br 50 -ex auto -co 20 -sa 20 -mm average -sh 10 -w 380 -h 200 -n -o /var/www/image.jpg', $output, $return_var);
    }
    }
    }

    # Error/Output Handling
    if (isset($return_var) AND $return_var >= 1) {
    echo "<font face='Arial, Helvetica, sans-serif' size='3' color='FF0000'>ERROR: </font>\n";
    echo "<font face='Arial, Helvetica, sans-serif' size='3' color='009900'>".exitcode($return_var)."<br/>\n";
    }
    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];
    }

    # HTML Sonderzeichen Unicode: http://unicode.e-workers.de/entities.php

    echo "<form name='control' action='".$_SERVER['PHP_SELF']."' method='POST'>\n";
    echo "<table border='0'>\n";
    echo "<tr>\n";
    echo "<td>&nbsp;</td>\n";
    echo "<td><button type='submit' value='oben' name='Motor'>↑</button>&nbsp;</td>\n"; // Oben
    echo "<td>&nbsp;</td>\n";
    echo "</tr>\n";
    echo "<tr>\n";
    echo "<td><button type='submit' value='links' name='Motor'>←</button>&nbsp;</td>\n"; // Links
    echo "<td><button type='submit' value='bild' name='Screenshot'>Bild machen</button>&nbsp;</td>\n";
    echo "<td><button type='submit' value='rechts' name='Motor'>→</button>&nbsp;</td>\n"; // Rechts
    echo "</tr>\n";
    echo "<tr>\n";
    echo "<td>&nbsp;</td>\n";
    echo "<td><button type='submit' value='unten' name='Motor'>↓</button>&nbsp;</td>\n"; // Unten
    echo "<td>&nbsp;</td>\n";
    echo "</tr>\n";
    echo "<tr>\n";
    echo "<td>&nbsp;</td>\n";
    echo "<td><button type='submit' value='4' name='LEDon'>LED an</button>&nbsp;<button type='submit' value='4' name='LEDoff'>LED aus</button></td>\n";
    echo "<td>&nbsp;</td>\n";
    echo "</tr>\n";
    echo "</table>\n";
    echo "</form>\n";
    ?>
    </body>
    </html>
    [/php]

    Desweiteren wirst du einen visudo Eintrag für den www-data Benutzer benötigen damit dieser ohne Password Abfrage sudo benutzen darf.
    Siehe dazu unbedingt Forumsuche nach sudo webscript
    Wichtig ist dass du www-dats nicht stumpf erlaubst alles über sudo zu benutzen, insbesondere dann wenn der PI übers Internet ansprechbar ist! Das wäre höchst unsicher!

Jetzt mitmachen!

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