Übungsblatt 4: Felder, Zeichenketten und Zugriffssteuerung

Aufgabe 1: Zahlenreihe verarbeiten

Thema dieser Übung ist die Verarbeitung einer Liste von Zahlen. Im Gegensatz zu der auf dem letzten Übungsblatt durchgeführten Berechnung der Fakultät können die Zahlen nun beliebigen Typs und beliebiger Reihenfolge sein, d. h. nicht nur die natürlichen Zahlen 1, 2, 3..n.

Variante 1: For-Schleife

Schreiben Sie zu diesem Zweck ein PHP-Script array.php, in dem das Produkt einer Menge von n Zahlen mit Hilfe einer for-Schleife berechnet wird. Die Zahlen werden als feste Werte intern im Skript in einem Feld gespeichert, d.h. das Script soll unabhängig vom bisher entwickelten Taschenrechner funktionieren. Für die Liste 3.5, 12.1, 43.3, 5.2 ergibt sich dann z. B. 9535,526.

Erweitern Sie ihr Skript array.php um einen Algorithmus zur Berechnung des Maximums der gegebenen Liste von Zahlen. Neben dem Produkt soll jetzt also ebenfalls die größte in der Liste enthaltene Zahl ausgegeben werden. Hinweis: Benutzen Sie NICHT die von PHP zur Verfügung gestellte Maximumfunktion max()!

Variante 2: Foreach-Schleife

Schreiben Sie obige Algorithmen so um, dass eine foreach-Schleife benutzt wird. (Sichern Sie aber vorher die FOR-Varianten der Algorithmen, da wir diese für das nächste Übungsblatt wieder benötigen!)

Die in dieser Übung erstellte Lösung werden wir mit dem nächsten Übungsblatt weiter entwickeln.


Aufgabe 2: Taschenrechner III

Integrieren Sie die in der vorigen Aufgabe entwickelten Algorithmen zur Verarbeitung einer Liste von Zahlen mit Hilfe der FOR-Schleife in ihren Taschenrechner. Erweitern Sie hierfür dessen GUI um Radio Buttons für die folgenden Operationen.

Version 1: Produkt

Diese Operation integriert den Algorithmus zur Berechnung des Produkts in die Benutzeroberfläche des Taschenrechners. Die übertragene Liste von Zahlen soll unterschiedlich lang sein können und wird im Operandenfeld 1 übergeben. Der Inhalt von Operandenfeld 2 wird ignoriert. Die Ausgabe der Operation soll wie folgt formatiert sein:

zahl_1* … *zahl_n = Produkt

Abb.1: Produkt einer Liste von Zahlen

Für die Liste 3.5, 12.1, 43.3, 5.2 ergibt sich dann das Ergebnis in Abbildung 1.

Version 2: Maximumsuche

Diese Operation integriert den Algorithmus zur Berechnung des Maximums in die Benutzeroberfläche des Taschenrechners. Die beliebig lange Liste von Zahlen wird wieder im Operandenfeld 1 übergeben. Das Resultat soll dabei wie folgt formatiert sein:

max{zahl_1zahl_n} = Maximum

Für die Liste 3.5, 12.1, 43.3, 5.2 ergibt sich das Ergebnis in Abbildung 2.

Abb.2: Maximumsuche aus einer Liste von Zahlen

Version 3: Ausdrücke auswerten

Bisher ist der Taschenrechner nur über die Operationsknöpfe (+, * etc.) steuerbar. Besser wäre es, wenn in das Operandenfeld direkt Ausdrücke, wie z. B. a + b oder a / b, eingegeben werden könnten und der Rechner diese automatisch auswerten würde. Implementieren Sie daher die folgende Funktionalität:

Wird im ersten Operandenfeld ein Ausdruck übertragen, z. B. 3.5 + 2.1, so soll der Taschenrechner dies bemerken, die gewünschte Operation (hier: Addition) bestimmen, die beiden zugehörenden Operanden extrahieren und auf diese die Operation anwenden. Der ausgewählte Radio Button wird in diesem Fall ignoriert. Die Verzweigung entsprechend der unterschiedlichen Operationen erfolgt zweckmäßigerweise mittels eines if-elseif-Befehls. Das Ergebnis wird wie bei den durch die Radio Buttons ausgelösten Operationen formatiert (siehe Abbildung 3).

Abb.3: Auswertung eines Ausdrucks

Sie brauchen nur positive erste Operanden, die vier Grundrechenarten und Ausdrücke, die lediglich aus zwei Operanden bestehen, berücksichtigen. D. h. Ausdrücke der folgenden Art müssen nicht korrekt ausgewertet werden: -12 - 3, 2.5 + 3 * 56 etc.


Aufgabe 3: Dateiupload II

Die im Rahmen des letzten Übungsblatts implementierte Anwendung für das Hochladen von Dateien auf den Webserver hat bislang einen Schönheitsfehler: Jeder, der die Benutzeroberfläche zur Eingabe der Dateinamen aufruft, kann beliebige Dateien auf den Server laden. Hacker könnten somit eigene Anwendungen auf ihren Server laden oder sogar ihre gesamte Webanwendung vom Server löschen, sofern sie Zugriff auf die Dateinamen der Anwendung erhalten (z. B. mit Hilfe von Directory-Listing). Aus diesem Grunde werden wir das Administrationswerkzeug mit einer Zugriffssteuerung ausstatten.

Webserver, die zum NCSA-Server kompatibel sind, wie unser Apache-Server, kennen das Konzept der .htaccess-Dateien. Dies sind reine Textdateien, mit denen sich durch Eintragen diverser Direktiven der Zugriff auf die Server-Dateien steuern lässt. Lesen Sie hierzu die folgenden SelfHTML-Abschnitte:

Erstellen Sie eine .htaccess und eine .htusers Datei, in der Sie einen Benutzernamen sowie ein Passwort für sich selber bzw. für alle Personen in ihrer Arbeitsgruppe vergeben. Der Schutz soll dabei mindestens für die HTML- und PHP-Dateien gelten, die zu der Anwendung für das Hochladen gehören. Für jede derartige Datei soll der Browser zukünftig eine Sicherheitsabfrage machen und nur den autorisierten Benutzern Zugriff auf die Dateien gestatten. Die .htusers-Datei erfordert einen Eintrag mit vollständiger Pfadangabe in der .htaccess-Datei. Der vollständige Pfad zu ihrem Web-Verzeichnis ist (mit x ersetzt durch die Nummer ihres Accounts):

C:\xampp\htdocs\dmuser\dmuserx\

Passwörter sollten möglichst nicht im Klartext an Administratoren gegeben und in Passwortdateien abgespeichert werden, da sie dann Dritten bekannt sind. Apache unter Windows gestattet die Verschlüsselung von Passwörtern mit der MD5-Methode. Eine Webseite, die Ihnen Online die Erzeugung von MD5-Passwörtern erlaubt, ist z. B. der Htpasswd Generator.

Die in dieser Übung erstellten Dateien werden wir für das nächste Übungsblatt wieder benötigen.