DVA Praktikum – Versuch 1 Gruppe 20

Transcription

DVA Praktikum – Versuch 1 Gruppe 20
DVA Praktikum – Versuch 1
Gruppe 20
von Yannic Chermette, Tobias Kloastermair und Philipp Kaufman
Aufgabenstellung: Realisieren Sie mit PHP :
einen Taschenrechner
einen Bankautomat
• einen Linkcrawler
•
•
Herangehensweise(Taschenrechner):
Als erster Schritt wurde eine neue Datei(taschenrechner.php) mit Gedit erstellt.
Im zweiten Schritt wurde mit Hilfe von Html die Oberfläche erstellt, sie besteht aus einer Form,die
einen Select(zur Auswahl des Rechenzeichens), 2 Inputfeldern(Zahleingabe)und einen Button für
die Berechnung(eigentlich „absenden“ der Eingaben an POST) besitzt .
Im dritten schritt wurde die logik des Taschenrechners mit PHP realisiert.
Wenn der Button gedrückt wird, werden die Inhalte der Inputfelder(+Rechenzeichen) in die POST
Variable übertragen und können somit ausgelesen und verarbeitet werden werden.
Zunächst wird überprüft ob Zahlen eingegeben wurden, danach wird mit einem Switch die richtige
Rechenart anhand des Rechenzeichens bestimmt und die Berechnung in $ergebnis gespeichert.
Zum Schluss wird die gesamte Rechenaufgabe mit Ergebnis angezeigt (über echo + String).
Bankautomat:
Der Bankautomat besteht aus einer HTML-Form, welche die Benutzereingaben verarbeitet.
Mögliche Eingaben sind die Kontonummer, ein Betrag sowie eine Operation (Ein- bzw.
Auszahlung) welche auszuführen ist.
Form zur Eingabe der Kontonummer sowie eines Betrages
Source-Code der Form
Nach Eingabe der Kontodaten sowie eines Betrages und Auswahl einer Operation wird der Nutzer
nach Absenden des Formulares auf eine weitere Seite geleitet, welche verschiedenen Erfolgs- bzw.
Fehlermeldungen bereithält.
Wurde kein Konto mit dieser Kontonummer gefunden oder reicht das Guthaben eines Kontos nicht
aus, so wird eine entsprechende Meldung angezeigt; ansonsten erscheint eine Erfolgsmeldung.
Die verschiedenen Konten werden mit ihrer Kontonummer sowie dem aktuellen Guthaben in einer
MySQL-Tabelle gespeichert. Diese ist simpel aufgebaut: ID, Kontonummer sowie Guthaben.
Aufbau der Tabelle
Source Code der Antwort-Seite nach Absenden des Formulares
Hier wird zuerst abgefragt, ob das Formular bereits abgeschickt wurde, ist dies nicht der Fall erfolgt
keinerlei Ausgabe.
Nun wird unterschieden zwischen einer Auszahlung und einer Einzahlung. Im Falle einer
Einzahlung wird der angegebene Betrag dem angegebenen Konto gutgeschrieben und anschliessend
der neue Kontostand ausgegeben.
Bei einer Auszahlung wird zuerst überprüft, ob das Konto über ausreichend Deckung verfügt um
den gewünschten Betrag auszuzahlen. Ist dies nicht der Fall, wird eine entsprechende
Fehlermeldung ausgegeben. Reicht das Guthaben aus, wird abgebucht und der neue Kontostand
wird angezeigt.
Einfacher Webcrawler
Was ist ein Webcrawler?
Ein Webcrawler ist ein kleines Tool mit dem man Webseiten aufrufen und nach bestimmten
Eigenschaften filtern kann. Außerdem filtern die meisten Webcrawler noch die Links von einer
Webseite und führt die Analyse auch bei diesen Unterseiten bzw. verlinkten Seiten aus.
Bekanntes Beispiel
Der bekannteste Webcrawler ist der berühmte Google Crawler. Dieser holt sich den Content von
Webseiten und wertet diesen Inhalt für die Suchmaschinenpositionen für bestimmte Keywörter aus.
Wie funktioniert und was kann unser einfacher Webcrawler?
Bei unserem Tool kann eine Startseite angegeben werden – quasi eine Url – und es kann eine Tiefe
mit angegeben werden. Anhand der Tiefe wird entschieden wie weit die Webseiten analysiert
werden. Eine Tiefe 1 gibt an das nur die angegebene Startseite analysiert wird. Eine Tiefe 2 besagt,
das auch die Seiten hinter den Links von der Startseite analysiert wird.
Sobald man den Startbutton betätigt werden alle Title-Tags von den jeweiligen Webseiten
herausgezogen.
Der Code
index.php
Die index.php wird aufgerufen sobald man per Browser den Ordner – in dem das Tool abgelegt ist auf dem Webserver aufruft.
In einem einfachen html-Formular wird die Informationen von Start-Url und der Tiefe
entgegengenommen.
Mit einem Klick auf den Startbutton werden die Informationen per Post an die result.php
übergeben.
<html>
<head>
<title>Versuch 1 - Ein einfacher Webcrawler</title>
</head>
<body>
<h1>Ein einfacher Webcrawler</h1>
<form action="result.php" method="post">
<p>
Start-Url<br>
<input name="start_url" type="text" size="30">
</p>
<p>
Tiefe<br>
<select name="deep" size="1">
<?php
for($i=1;$i<=100;$i++){
echo "<option>".$i."</option>";
}
?>
</select>
</p>
<input type="submit" value="Start">
</form>
</body>
</html>
result.php
Hier werden die Daten von Post ausgelesen und die benötigten Funktionen werden aus der
funktions.php inkludiert.
Anschließend wird der eigentliche Crawler-Algorithmus gestartet. Der Rückgabewert ist ein Array
und wird mit dem Standart-PHP-Befehl print_r ausgegeben.
<?php
//include functions
include "functions.php";
//get input from form
$start_url = $_POST["start_url"];
$deep = $_POST["deep"];
//get content from url
echo "<pre>";
print_r(startProcess($start_url, $deep));
?>
functions.php
In dieser Datei sind die eigentlichen Crawler-Algorithmus-Funktionen. Diese werden im
Nachfolgenden im Code beschrieben.
getContentFromUrl($url)
Hier wird die entgegengenommene URL übergeben und der Content dieser Url wird per Curl geholt
und auch zurückgegeben.
getTitleByHtmlContent($html_content)
Der von getContentFromUrl zurückgegebene Content wird hier übergeben und es wird erst
überprüft ob es ein Title-Tag gibt. Wenn ja, dann wird eben der Titel zurückgegeben. Falls nein,
dann wird „no title“ zurückgegeben.
getLinksByHtmlContent($html_content)
Hier wird wieder der von getContentFromUrl zurückgegebene Inhalt übergeben und die Links
werden mit „preg_match_all“ ausgelesen. Für diese Funktion wird ein Regular-Expression-Pattern
benötigt. Mit dem Pattern |<a.*?href=“(.*?)“| kann man HTML-typische Links ermitteln. Diese
werden alle heraus gefiltert und per Array zurückgegeben.
convertLink($link, $start_url)
Hier wird jeder ausgelesene Link übergeben und konvertiert. Falls nämlich interne Links ausgelesen
werden – Bsp. /unterseite.html – dann wird die Haupturl noch davorgehängt. Das wird gemacht
weil Curl ordentliche Links benötigt.
startProcess($url, $deep, $title_array = array())
In dieser Funktion – der Hauptfunktion – werden zunächst die 3 Methoden von oben aufgerufen
und die selbe Funktion rekursiv je nach angegebener Tiefe wiederholt nochmal.
Zurückgegeben wird das Title-Array von allen aufgerufenen Seiten.
<?php
function getContentFromUrl($url){
$cl = curl_init();
curl_setopt($cl, CURLOPT_URL, $url);
curl_setopt($cl, CURLOPT_RETURNTRANSFER, 1);
$content_from_url = curl_exec($cl);
curl_close($cl);
return $content_from_url;
}
function getTitleByHtmlContent($html_content){
if(preg_match("~<title>~", $html_content)){
$first_split_array = preg_split("~<title>~", $html_content);
$second_split_array = preg_split("~</title>~", $first_split_array[1]);
return $second_split_array[0];
}
return "no title";
}
function getLinksByHtmlContent($html_content){
$regex='|<a.*?href="(.*?)"|';
preg_match_all($regex,$html_content,$parts);
return $parts[1];
}
function convertLink($link, $start_url){
if(!preg_match('~http://~', $link)){
return $start_url."/".$link;
}
return $link;
}
function startProcess($url, $deep, $title_array = array()){
$content_from_start_url = getContentFromUrl($url);
$title_array[] = getTitleByHtmlContent($content_from_start_url);
$link_array = getLinksByHtmlContent($content_from_start_url);
if($deep == 1){
return $title_array;
} else {
foreach($link_array as $link){
$title_array = startProcess(convertLink($link, $url), $deep-1, $title_array);
}
return $title_array;
}
}
?>

Documents pareils