====== Dynamische Webseiten mit Bash und Haserl ====== Mit [[http://haserl.sourceforge.net/ | Haserl]] kann man mittels Shell oder Lua Skripten dynamische Webseiten erstellen. Hierzu bildet Haserl die [[http://de.wikipedia.org/wiki/Common_Gateway_Interface | CGI]] Schicht zwischen z.B. BASH und einem Webserver wie Apache. ===== Warum Haserl? ===== Es gibt viele Möglichkeiten dynamische Webseiten zu gestalten, die populärste dürfte eine Kombination aus [[http://php.net/|PHP]] und [[http://httpd.apache.org/|Apache]] sein. Der Vorteil von Haserl gegenüber z.B. PHP ist dessen Größe. Diese liegt typischerweise bei ca. 20k Byte. Zudem wird als Scripting-Sprache BASH verwendet, die meistens sowieso installiert ist. ===== Beispiele ===== **HINWEIS:** Alle Beispiele kann man auch {{:it:linux:haserl_examples.tar.gz|hier}} herunterladen. ==== Hallo Welt ==== #!/usr/bin/haserl Content-type: text/html <% echo "Hallo Welt!" %> Wie hier zu sehen ist, kann man Skript einfach zwischen "<%" und "%>" schreiben und html außenrum. Da der Text zwischen den oben genannten Tags durch BASH interpretiert wird, gelten dort die bekannten Regeln, wie z.B. Kommentare usw. ==== For Schleife ==== #!/usr/bin/haserl Content-type: text/html <% for color in Red Green Blue Yellow Cyan; do echo -n "" done %>
$color
Das sieht dann im Browser folgendermaßen aus: {{ :it:linux:for.png }} ==== Externe Programme aufrufen und deren Ausgaben darstellen ==== #!/usr/bin/haserl Content-type: text/html
<% uname -a %>
Das sieht dann z.B. so aus: {{ :it:linux:external.png?650 |}} ==== Download ==== #!/usr/bin/haserl Content-type: application/octet-stream Content-Disposition: attachment; filename=random.dat <% echo "" dd if=/dev/urandom bs=1024 count=1024 %> Dieses Script besorgt sich 1MB Zufallsdaten von /dev/uramdom und bietet sie dem Client zum Download an.\\ Wie hier zu sehen ist, kann man ganz einfach gestreamte Daten (ohne Zwischenspeichern) zum Download anbieten und den Namen der heruntergeladenen Datei vorbelegen. \\ Dies funktioniert natürlich auch mit tar für Backups. ==== Upload ==== #!/usr/bin/haserl --upload-limit=4096 --upload_dir=/tmp/ Content-type: text/html

<% if test -n "$HASERL_uploadfile_path"; then %>

You uploaded a file named <% echo -n $FORM_uploadfile_name %>, and it was temporarily stored on the server as <% echo $HASERL_uploadfile_path %>. The file was <% cat $HASERL_uploadfile_path | wc -c %> bytes long.

<% rm -f $HASERL_uploadfile_path %>

Don't worry, the file has just been deleted from the web server.

<% else %> You haven't uploaded a file yet. <% fi %>
An Anfang sieht das so im Browser aus: {{ :it:linux:upload1.png |}} Hat man eine Datei hochgeladen, so sieht die Seite dann so aus: {{ :it:linux:upload2.png |}} ==== GET Variable ==== #!/usr/bin/haserl Content-type: text/html <% echo $FORM_testvariable %> Wenn dieses Script so get.sh?testvariable=hallo_welt aufgerufen wird, so wird im Browser "hallo_welt" ausgegeben. \\ Wie Haserl genau mit GET, POST und COOKIE Methoden umgeht, kann man am besten in der Manpage unter "Client side input" nachlesen. ===== Links ===== * [[http://haserl.sourceforge.net/ | Haserl]] * {{:it:linux:haserl_examples.tar.gz| Haserl Beispiele}}