PHP - Universität zu Köln

Transcription

PHP - Universität zu Köln
PHP
Universität zu Köln
Sprachliche Informationsverarbeitung
SS13 Kolloquium Forschungsprobleme der
linguistischen Datenverarbeitung
Dozent: Prof. Dr. Jürgen Rolshoven
Referent: Alexander Pentzlin
Übersicht
➢
Was ist PHP?
➢
Webserver
➢
Entwicklung
➢
Einführung
➢
Superglobale Arrays
➢
Formular
Übersicht
➢
Dateien
➢
Funktionen
➢
foreach
➢
Fehlermeldungen
➢
Beispiele
➢
MySQL
Was ist PHP?
●
Die Abkürzung PHP stand ursprünglich für
„Personal Homepage Tools“ und wurde mit der
Version 3 in „PHP: Hypertext Preprocessor“
umbenannt.serverseitig interpretierte
Skriptsprache
●
Paradigmen: imperativ, objektorientiert
●
Erscheinungsjahr: 1995
Designer: Rasmus Lerdorf
●Entwickler: The PHP Group
●Aktuelle Version: 5.4.14 (April 2013)
●Typisierung: schwach, dynamisch
●Beeinflusst von: Perl, C, C++, Java
●Betriebssystem: plattformunabhängig
●Lizenz: PHP-Lizenz und andere, teilweise
proprietär
●Webseite: php.net
●
Ein typischer Ablauf mit Request und
Response (Anfrage und Antwort)
Webserver
●
●
●
●
XAMPP: Das X im Namen sagt aus, dass
diese Version auf den meisten
Betriebssystemen verfügbar ist. Beinhaltet
Apache, das Datenbanksystem MySQL, PHP
und eine weitere Skriptsprache namens Perl.
WAMP: Für Windows: Apache, MySQL und
PHP
LAMP: Für Linux: Apache, MySQL und PHP
MAMP: Für Macintosh: Apache, MySQL und
PHP
C:\xampp\htdocs
In diesen Ordner kommen alle PHP-Skripts. Man
kann ihn im Browser unter http://localhost/ bzw.
http://127.0.0.1 erreichen
Zum Test legt man am besten
C:\xampp\htdocs\index.php an und schreibt
folgendes hinein:
<?php
phpinfo();
?>
Entwicklung
Personal Home Page Tools (PHP1): 1995,
Rasmus Lerdorf, ursprünglich als Ersatz für eine
Sammlung von Perl-Skripten gedacht.
PHP/FI (PHP 2): Rasmus Lerdorf, Form
Interpreter.
PHP 3: Andi Gutmans und Zeev Suraski, neuer
Namen „PHP: Hypertext Preprocessor“.
PHP 4: Zend Technologies Ltd. entwickelte in der
Folge die Zend Engine 1. Sicherheit bei
Verwendung globaler Variablen verbessert.
PHP 5: 2004, Zend Engine II, verbessertes
Objektmodell, Erweiterungen bei XML- und
DOM-Handhabung. PHP 5.3 (Namespaces, Late
Static Bindings, interner Garbage Collector), 5.4
(Traits, Array- und Konstruktor-Dereferenzierung,
Kommandozeile) und 5.5 (Generatoren).
PHP 6: geplant- Einstellungen, die für die
Sicherheit von Skripts teilweise gefährlich sind,
entfernt. Dazu zählen register_globals,
magic_quotes und safe_mode. Unterstützung
verschiedener Unicode-Standards.
Einführung
Es gibt Kontrollstrukturen wie if und SwitchCase. Außerdem gibt es die Schleifen for, while
und do-while. Eine weitere Schleife für den
einfachen Umgang mit (assoziativen) Arrays ist
die foreach-Schleife.Jede Anweisung wird mit
einem Semikolon („;“) abgeschlossen.
Da der PHP-Interpreter nur PHP-Code zwischen
<?php und ?> bzw. <? und ?> (short_open_tag)
interpretiert, kann PHP auch problemlos in
HTML-Dokumente eingebunden werden.
Superglobale Arrays
Superglobale Arrays heißen so, weil sie überall
im Skript verfügbar sind. Man kann sie in jeder
Methode oder Funktion verwenden. Die
wichtigsten Superglobals sind folgende:
$_POST: Über $_POST hat man Zugriff auf alles,
was mit der POST-Methode an das Skript
geschickt wurde. In der Regel kommen diese
Daten aus Formularen oder AJAX-Requests.
(AJAX = Asynchronous JavaScript and XML)
$_GET: $_GET enthält die Parameter, die ein
Skript über die URL mitbekommt. z.B. index.php?
name=karl&alter=89
In index.php steht jetzt $_GET[„name“] mit dem
Inhalt „karl“ und $_GET[„alter“] mit dem Inhalt 89
zur Verfügung.
$_COOKIE: Cookies sind Textdateien auf dem
Rechner des Benutzers. Sie dienen zum
Speichern von Dateien, die zur Identifikation des
Benutzers notwendig sind. Häufig werden auch
andere Daten darin gespeichert. z.B. welches
Design der Benutzer auf einer Website
ausgewählt hat.
Alle Cookies, die von der Domain, auf der sich
das Skript befindet, gesendet wurden, sind in
$_COOKIE wieder abrufbar.
$_REQUEST: Wenn man nicht weiß, ob Daten
von $_POST, $_GET oder $_COOKIE kommen,
verwendet man $_REQUEST. In $_REQUEST
sind alle Elemente der Post-, Get- und CookieSuperglobals enthalten. Wenn möglich, sollte
man $_REQUEST vermeiden, weil Skripts
dadurch komplizierter und fehleranfälliger
werden.
$_SERVER: Hier finden sich sowohl
Informationen über den Server (z.B. die Uhrzeit
oder die Domain) als auch über den Benutzer
und dessen Browser. Unter anderem kann
abgefragt werden, welche IP-Adresse der
Benutzer verwendet und von wo er kommt (Der
sogenannte Referer)
$_FILES: Wenn der User Dateien über ein
Formular hochlädt, kann man im PHP-Skript über
$_FILES damit arbeiten.
$_SESSION: $_SESSION ist ein wesentliches
Feature von PHP. Mit Sessions ist es möglich,
benutzerbezogene Daten über mehrere
Skriptaufrufe hinweg zu erhalten. Das häufigste
Anwendungsgebiet von Sessions sind
Loginsysteme, wo sich ein Benutzer einloggen
und unter seinem Nickname bestimmte Aktionen
ausführen kann.
PHP identifiziert den Benutzer anhand der
Session-ID, die meistens über Cookies
($_COOKIE) oder die URL ($_GET) übertragen
wird. So weiß das Skript automatisch, welche
Daten zum aktuellen Benutzer gehören.
Formular
Formulare nutzen meistens die Superglobals
$_GET und $_POST, manchmal auch $_FILES,
wenn Dateien hochgeladen werden.
$_GET Übertragung der Daten über die URL
$_POST Es können viel größere Datenmengen
als mit GET übertragen werden. GET erlaubt
meistens nur 255 Byte. Das variiert aber von
Browser zu Browser.
Beispiel (Inhalt von index.php
bzw. index.html)
<html>
<head><title>Das erste Formular</title></head>
<body>
<form action=“verarbeitung.php“ method=“get“>
Bitte geben Sie Ihren Namen ein:
<input type=“text“ name=“textfeld“ />
<input type=“submit“ value=“Abschicken“ />
</form>
</body>
</html>
Beispiel (Inhalt von
verarbeitung.php)
<?php
if(isset($_GET[„textfeld“]))
{
echo „Hallo, „.$_GET[„textfeld“].“!“;
}
else
{
?>Es wurde kein Name übertragen<?php
}
?>
Dateien
Wie auch in C kann man in PHP Dateien
einbinden. Meistens werden Funktionen und
Klassen ausgelagert, so dass diese nur bei
Bedarf geladen werden.
Eine Datei kann man mit folgenden 4 Befehlen
laden lassen:
●
include(„meine_datei.php“)
Include() ist der Standardbefehl zum Laden von
weiteren PHP-Dateien. Falls die Datei, die in der
Klammer angegeben wird, nicht existiert, wird
eine Fehlermeldung ausgegeben, das Skript wird
aber nicht abgebrochen.
●
require(„meine_datei.php“)
Arbeitet gleich wie include(). Der Unterschied ist
jedoch das Skript wird abgebrochen, wenn die
Datei nicht existiert. Das ist sinnvoll, wenn eine
Datei sehr wichtige Funktionen enthält, ohne die
die Abarbeitung des Skripts fehlschlagen würde.
●
include_once(„meine_datei.php“)
●
require_once(„meine_datei.php“)
Binden jede Datei nur einmal ein. Das wird oft
genutzt, um Funktionen zu inkludieren. Wenn
eine Funktion mehrmals deklariert wird,
verursacht PHP eine Fehlermeldung.
Funktionen
Auch in PHP kann man eigene Funktionen
definieren. Im Gegensatz zu C++ und C haben
diese aber keinen Rückgabewerttyp. Eine
Funktion kann alle Datentypen (int, float, array,
string, bool, …) zurückgeben.
Beispiel
(Inhalt von getValue.php)
function getValue($type=“integer“)
{
switch($type)
{
case „string“: return „ein String“; break;
case „integer“: return 10; break;
case „float“: return 10.5; break;
default: return false;
}
}
(Inhalt von index.php)
//getValue.php einbinden
require(„getValue.php“);
//getValue() ist jetzt verfügbar
$zahl = getValue(„integer“); //$zahl enthält jetzt
10
$string = getValue(„string“); //$string enthält jetzt
„ein String“
$float = getValue(„float“); //$float enthält jetzt 10.5
$bool = getValue(„undefinierter_fall“); //$bool ist
false, weil es „undefinierter_fall“ nicht gibt
<?php
echo $zahl1 + $zahl2; //addieren
echo $zahl1 - $zahl2; //subtrahieren
echo $zahl1 * $zahl2; //multiplizieren
echo $zahl1 / $zahl2; //teilen/dividiern
echo pow($zahl1,$zahl2); //Zahl1 hoch Zahl2
(102)
echo sqrt(64); // Wurzel von 64
?>
Logische Operatoren:
Bei AND müssen beide Bedingungen erfüllt sein
Bei OR muss mindestens eine Bedingung erfüllt
sein
Bei XOR darf nur eine Bedingungen erfüllt sein
foreach
In C++ und den meisten anderen Sprachen gibt
es nur for-, while-, und do-while-Schleifen. PHP
bietet für den Umgang mit (vor allem
assoziativen) Arrays die foreach-Schleife an, mit
der man über alle Elemente eines Arrays iterieren
kann.
(Inhalt von foreach.php)
<?php
//Array initialisieren
$person = array();
$person[„name“] = „Peter“;
$person[„alter“] = 17;
$person[„wohnort“] = „Berlin“;
$person[„Beruf“] = „arbeitslos“;
//Alle Elemente von $person ausgeben
echo „Person enthält folgende Elemente: <br />“;
foreach($person as $key => $value) //$key macht
den Schlüssel des Elements zugänglich,
//$value den Inhalt
{
echo $key.“: „.$value;
echo „<br />“;
}
?>
Ausgabe
Das Skript erzeugt diese Ausgabe:
Person enthält folgende Elemente:
name: Peter
alter: 17
wohnort: Berlin
Beruf: arbeitslos
Fehlermeldungen
Wenn man eine Webanwendung entwickelt, ist
es mehr als sinnvoll, das sogenannte
error_reporting auf (E_ALL | E_STRICT) zu
stellen.
●
●
E_ALL heißt, dass alle Fehlermeldungen
angezeigt werden.
E_STRICT zeigt Verbesserungsvorschläge für
das Skript an.
Beispiel
error_reporting(E_ALL | E_STRICT);
echo $test["irgendwas"];
Wenn vorher $test[„irgendwas“] noch nicht mit
einem Wert belegt wurde, gibt PHP diese
Meldung aus:
Notice: Undefined variable: person in
C:\xampp\htdocs\fehlermeldungen.php on line
2
Anhand dieser Meldung kann man den Fehler
sehr schnell erkennen und beheben.
Produktivbetrieb
➢
error_reporting unbedingt auf E_NONE stellen.
Damit werden alle Fehlermeldungen
deaktiviert. Denn jede Fehlermeldung verrät
Informationen über ein Skript, mit denen ein
Angreifer möglicherweise unbefugten Zutritt
erhält.
Beispiel
(Inhalt von index.php)
<?php
$pages = array(“starseite”, “bilder”,
“sonstiges”); //(1)
$page = $_GET["page"]; //(2)
if($page == “” || $page == NULL || !
in_array($page, $pages)) //(3)
{
$page = “startseite”;
}
$ordner_mit_inhalten = “inhalte/”; //(4)
$include_pfad = $ordner_mit_inhalten.
$page.”.php”; //(5)
?>
<html>
<head>
<title>Meine Homepage</title>
</head>
<body>
<!– Header –>
<h1>Meine Homepage</h1>
<!– Menu –>
<a href=”index.php?
page=startseite”>Startseite</a> |
<a href=”index.php?page=bilder”>Bilder</a> |
<a href=”index.php?
page=sonstiges”>Sonstiges</a>
<hr />
<!– Inhalt –>
<?php
include($include_pfad); //(6)
?>
</body>
</html>
(1): In diesem Array stehen alle $_GET[„page“]Parameter, die erlaubt sind.
(2): $_GET[„page“] wird $page zugewiesen
(3): Wenn $page leer ist oder nicht in $pages
steht, wird automatisch die Startseite angezeigt
(4): $ordner_mit_inhalten speichert den Pfad zu
den Skripts mit den Inhalten
(5): Hier wird der Pfad zusammengebaut.
(6): Schließlich wird noch der Inhalt eingebunden
MySQL
●
http://localhost/phpmyadmin
●
Benutzer, Datenbanken, Tabellen anlegen
●
Verbindungsaufbau:
<?php
$verbindung = mysql_connect("servername",
"euerBenutzername","euerPasswort");
?>
●
Datenbank:
<?php
$verbindung = mysql_connect ("Servername",
"Username", "Passwort")
or die ("keine Verbindung möglich.
Benutzername oder Passwort sind falsch");
mysql_select_db("Datenbankenname")
or die ("Die Datenbank existiert nicht.");
?>
●
Abfrage:
<?php
$abfrage = "SELECT * FROM links";
$ergebnis = mysql_query($abfrage);
while($row = mysql_fetch_object($ergebnis))
{
echo "$row->name, $row->url, $row>urlname <br>";
}
?>
Vielen Dank für Eure
Aufmerksamkeit!
Quellen:
http://de.wikipedia.org/wiki/PHP
http://php.net/
http://www.php-einfach.de/
http://www.net-developers.de

Documents pareils