Demo fuer PHP-Automaten'; // Formularstatus checken; beim ersten Aufruf der Seite ist // natuerlich kein Status vorhanden --> $status = "NIX" $Status = (isset($_POST['STATUS']))? $_POST['STATUS'] : "NIX"; // weiterer Aufruf der Seite: Formular wurde ausgefuellt, // ensprechende reagieren if ($Status == 'Absenden') { // Formulardaten pruefen // Verarbeitung der Text-Felder $Passwort = security_filter($_POST['Passwort']); $Passwort = trim($Passwort); check($Passwort,"Passwort"); $Passwort = sha1($Passwort); // Passwort-Hases vergleichen if ($Passwort != $PW) { print '

Sorry, falsches Passwort!

'; nachspann(); exit; } print "

Vielen Dank, Ihre Angaben wurden folgendermaßen bearbeitet:

\n"; print '
Passwort (SHA1-Hash): ' . $Passwort . ', LEDs ' . $_POST['LED1'] . ' ' . $_POST['LED2'] . ' ' . $_POST['LED3'] . ' ' . $_POST['LED4'] . '

Zurück
'; // Hier die Verarbeitung der LEDs // ACHTUNG: Vorher muessen die GPIO-Ports initialisiert und das // Zugriffsrecht fuer die Gruppe GPIO gesetzt sein // (siehe RasPi_GPIO.html) // Port 17 27 22 23 // LED 1 2 3 4 $res = gpio_set_value('17', $_POST['LED1']); $res = gpio_set_value('27', $_POST['LED2']); $res = gpio_set_value('22', $_POST['LED3']); $res = gpio_set_value('23', $_POST['LED4']); // Die folgenden Beispiele zeigen wie man Shell-Kommandos // aufruft und deren Ausgaben an den Browser durchreicht. // Falls Usereingaben (Formulardaten) an diese Funktion weitergereicht werden, // sollten Sie escapeshellarg() oder escapeshellcmd() verwenden. print "

\nAusgabe des uname-Kommandos:\n";
  passthru('/bin/uname -a',$err);
  print "Fehlercode: $err
\n"; // Soll der Programm-Output vor der Ausgabe noch aufbereitet werden, // kann man ihn auch in einer Variablen speichern. Die Pufferung // der Ausgabe beginnt mit: ob_start(); // Aufruf wie oben, nur landet der Output im "Output Buffer" print "
\nAusgabe des uptime-Kommandos:\n";
  passthru('/usr/bin/uptime',$err);
  print "Fehlercode: $err
\n"; print "
Ausgabe des date-Kommandos:\n";
  passthru('/bin/date  +%d.%m.%Y-%H:%M:%S',$err);
  print "Fehlercode: $err
\n"; // Nach den Kommandoaufrufen kann deren gepuffertere Output // in eine Variable uebernommen werden: $inhalte = ob_get_contents(); // Der Puffer wird nicht mehr gebraucht, also ausleeren: ob_end_clean(); // Kontrollausgabe der Variablen print $inhalte; // Man kann das Kommando auch, wie in der Shell ueblich, seine Ausgaben // in eine Datei, z. B. nach "/tmp/df.txt", umleiten lassen. Das // Verzeichnis "/tmp" ist in all solchen Fällen eine gute Wahl: system('df -k > /tmp/df.txt'); print "
Ausgabe des df-Kommandos:\n";

  // Die Datei wird mittels readfile() ausgegeben
  // (readfile() funktioniert wie das Kommando "cat" in der Shell):
  readfile('/tmp/df.txt');

  print "
\n"; // Die nicht mehr benoetigte Datei loeschen: unlink('/tmp/df.txt'); } else { // Keine Formulardaten vorhanden? Dann Formular ausgeben print '

Bitte geben Sie das Passwort ein:

Passwort
LED 1 AUS EIN
LED 2 AUS EIN
LED 3 AUS EIN
LED 4 AUS EIN


 

'; // Anstelle der Submit-Variablen fuer den Status kann auch ein Eingabetag // vom Typ "hidden" verwendet werden. Dann kann man beliebige Werte fuer // den Status verwenden und muss nicht das nehmen, was auch auf dem Button steht. } nachspann(); // ================================== Funktionen ================================= // Check auf leeren String, ggf. Fehlermeldung und EXIT function check($TVar, $Description) { if(empty($TVar)) { print ' Formular unvollständig ausgefüllt - bitte ' . $Description . ' angeben/korrigieren.
Nichts gespeichert!


' . 'Zurück
'."\n"; nachspann(); exit; } } // HTML-Vorspann am Anfang function vorspann() { print ' Demoprogramm Projektpraktikum '; } // HTML-Nachspann am Ende function nachspann() { print '


Bei Fragen wenden Sie sich an den Adminstrator, bla bla bla ...
'; } // Entfernt aus einem gequoteten String alle Quotes function my_remove_slashes($st) { if (get_magic_quotes_gpc()) { return stripslashes($st); } else { return $st; } } // Filtert "boese" Dinge function security_filter($st) { $attribs = 'javascript:|onclick|ondblclick|onmousedown|onmouseup|onmouseover|'. 'onmousemove|onmouseout|onkeypress|onkeydown|onkeyup'; $st = my_remove_slashes($st); $st = stripslashes(preg_replace("/$attribs/i", 'forbidden', $st)); $st = strip_tags($st); $st = preg_replace('/;/',',',$st); return $st; } //////////// Die folgenden Funktionen wurden auf der Seite "RasPi_GPIO_C.html" //////////// //////////// beschrieben und sind hier nur einkopiert worden //////////// // gibt den augenblicklichen Wert (0/1) des Pins zurueck // oder einen leeren String im Fehlerfall function gpio_get_value($pin) { $Val = ''; if (gpio_is_exported($pin) && gpio_get_direction($pin) == 'in') { $Val = trim(file_get_contents(GPIOPATH.'gpio'.$pin.'/value')); } return $Val; } // gibt den Wert in $value (0/1) auf dem Pin aus function gpio_set_value($pin, $value) { if (gpio_is_exported($pin) && gpio_get_direction($pin) == 'out' && ($value == '0' || $value == '1')) { file_put_contents(GPIOPATH.'gpio'.$pin.'/value', $value); return true; } else { return false; } } // prueft, ob der Pin exportiert ist function gpio_is_exported($pin) { return file_exists(GPIOPATH.'gpio'.$pin.''); } // gibt die eingestellte Richtung zurueck function gpio_get_direction($pin) { $dir = ''; if (gpio_is_exported($pin)) { $dir = trim(file_get_contents(GPIOPATH.'gpio'.$pin.'/direction')); } return $dir; } // Stellt die Richtung ein ($direction: 'in' oder 'out') function gpio_set_direction($pin, $direction) { if (gpio_is_exported($pin) && ($direction == 'in' || $direction == 'out')) { file_put_contents(GPIOPATH.'gpio'.$pin.'/direction', $direction); return true; } else { return false; } } ?>