Web-Seminar Serverseitige Technologien

Werbung
Web-Seminar
Serverseitige Technologien
PHP - 31.01.06
Gikas Stelios <[email protected]>
Einleitung
Serverseitige Technologien
PHP
Installation
Variablen, Typen
HTTP GET/POST
Sessions, Cookies
Klassen, Objekte
MySQL
Serverseitige Technologien
Was sind Serverseitige Technologien
Werden auf dem Server installiert
Werden von Webserver ausgewertet
Client sieht gar nichts davon
Serverseitige Technologien
Was sind Serverseitige Technologien
Vorteile
Clientseitige Ressourcen werden nicht verbraucht
Keine Plugins im Browser nötig
Code wird nicht offen gelegt
Verhältnismäßig wenig Aufwand für dynamische
Seiten
Nachteile
Server Ressourcen werden verbraucht
Versionsunterschiede
Welche gibt es
PHP, Java Servlets, JAVA Server Pages, Active
Server Pages, Apache/Tomcat
PHP Code Examples
<?php
$name = "Lisa";
$date = date ("d-m-Y", time());
?>
<html>
<head>
<title>Hello World</title>
</head>
<body>
<h1>Hello World</h1>
<p>It's <?php echo $date; ?> and all is well. </p>
<?php
echo "<p>Hello ".$name.".</p>\n";
?>
</body>
</html>
Perl Coding Example
#!/usr/local/bin/perl
print "Content-type: text/html \n\n";
$date = `/usr/local/bin/date`;
$name = "Lisa";
print "<html>";
print "<head>";
print "<title>Hello World</title>"
print "</head>\n<body>";
print "<h1>Hello World</h1>";
print "<p>It\'s $date and all is well</p>";
print "<p>Hello $name</p>";
print "</body></html>";
JSP Coding Example
<%@ page language="java"
contentType="text/html" %>
<%! String name = "Lisa" %>
<html>
<head> <title>Hello World</title> </head>
<body>
<h1>Hello World</h1>
<p>It's <%= new java.util.Date().toString() %>
and all is well. </p>
<p> Hello <%= name %>.</p>
</body>
<html>
PHP - Einführung
Was ist PHP (aktuell Version 5.1.1)
PHP
…steht für „Hypertext Preprocessor“
…ist eine Serverseitige Technologie zur Erstellung von
dynamischen Erstellung von Webseiten
…wird in HTML eingebettet
…Syntax ist ähnlich wie die von C/C++
…ist leicht erlernbar
…ist sehr leicht an Datenbank anzubinden
…ist umsonst
…stellt über 1200 Funktionen für verschiedene
Anwendungen
PHP - Einführung
PHP – Preprocessor
Preprocessor konvertiert den Eingabetext und
gibt das Ergebnis aus.
Webseiten werden eingelesen und
unverändert ausgegeben.
Enthält eine Seite PHP-Markierungszeichen
werden sie erstmal vom PHP Programm
interpretiert
PHP verarbeitet die Webseite und gibt, an
Stelle des Programms, den Programmtext
aus.
PHP - Einführung
PHP – Preprocessor
Mit PHP Version 4 kam auch ZEND
Kommerzielle Code-Engine für optimierten
sicheren Produktionsbetrieb
ZEND stellt Zend Engine für PHP kostenlos zur
Verfügung
ZEND stellt aber auch andere kommerziele
Produkte zur Verfügung
ZEND IDE – Developer Package das einem die
Arbeit erleichtern soll
SOS-Support Services
PHP - Einführung
PHP – Preprocessor
Es gibt momentan nur ZEND als preprocessor
JVM
Sun
kaffee
….
Eigentlich ein Nachteil von PHP
PHP - Einführung
(1) Browser ruft die Website vom Webserver auf.
(2) Der Webserver ruft die Zend Engine auf, welche auf die Disk
zugreift
(3) Von der Webserver Disk wird der PHP Code geholt und wird
an den Runtime Compiler geschickt
PHP - Einführung
(4) Der Runtime Compiler generiert eine compilierte
Representation vom Script und schickt diese an den Executor
(5) Der Executor generiert HTML. Aufrufe von anderen Modulen
(SQL, XML, …), werden an die PHP module weitergeleitet,
verarbeitet und auch ans Web Server Interface geschickt
(6) Welches dann am Ende alles an den Browser schickt
PHP - Installation
Linux (General)
Downloaden
Auspacken
. ./configure
--with-mysql
--with-apache=../apache_2.x
--prefix=/wwwroot
Make
Make install
PHP - Installation
Linux (Debian)
Über apt-get install am einfachsten
Config Files einrichten
Windows
Am besten PHP Triad holen und installieren
PHP Triad besteht aus
Apache Webserver
MySQL for Windows
PHP for Windows
PHP - Konfiguration
/etc/php4/apache2/php.ini (Auszug)
register_globals
<input name="formVariable">
PHP code when register_globals = On
$myNewVariable = $formVariable;
PHP code when register_globals = Off
$myNewVariable = $_POST['formVariable'];
upload_tmp_dir
Wo sollen die Temporäre Dateien gespeichert
werden
PHP - Konfiguration
/etc/php4/apache2/php.ini
display_errors and display_startup_errors
Diese zwei Einstellungen kontrollieren ob
Fehlermeldungen am Browser ausgegeben
werden sollen oder ob er leise sein soll
log_errors and error_log
Diese Einstellungen kontrollieren ob errors in eine
log-Datei geschrieben werden sollen.
PHP - Konfiguration
/etc/php4/apache2/php.ini
max_execution_time = 30
max_input_time = 60
Maximum execution time of each script, in
seconds
Maximum amount of time each script may spend
parsing request data
memory_limit = 8M
Maximum amount of memory a script may
consume (8MB)
PHP - Einbindung
Wie schaut eine php Codebaustein aus.
<script language=“php“>
</script>
<?php
?>
<?
?>
<%
%>
<?=„bla bla“ ?>
PHP - Funktionsweise
HTML:
<html><body>
<p>Heute ist der 31.01.2006</p>
</body></html>
PHP:
<html><body>
<?php
print "Heute ist der ".date("d.m.y");
?>
</body></html>
PHP – Echo Funktion
echo "Hello World!!!";
Ausgabe : Hello World!!!
echo ‘Hello World!!!’;
Ausgabe : Hello World!!!
echo “<p align=“center”> Hello World!!! </p>“;
Ausgabe : Fehler !!!
Lösung durch Escape Charakter \
oder
echo ‘<p align=“center”> Hello World!!! </p>’;
Ausgabe : Hello World!!!
PHP – Print Funktion
print (‘Hello World!!!’);
Ausgabe : Hello World!!!
Unterschiede zu echo
Echo() ist keine Funktion sondern ein Sprachkonstrukt
Print hingegen verhält sich wie eine Funktion und
liefert auch einen Wert.
(Ausdr) ? Anw : Anw;
If .. Then .. Else (bekannt aus C++)
($eine_variable) ? echo('true'): echo('false'); //ungültig
($eine_variable) ? print('true'): print('false'); //gültig
echo $eine_variable ? 'true': 'false'; // gültig
PHP – Variablen, Typen
Werden mit $ registriert
Aber keine Zahl am Anfang
Datentyp wird automatisch erkannt
Strings
$var = “Du“;
// gültig
$Var = “Ich“;
// gültig
$_bla = “dsad“
// gültig
$4bla = “dsad“ // ungültig da Zahl vorne
Integer
$a = 1234;
Ausgabe mittels echo
echo “$var und $Var $a“;
Nicht aber echo ‘$var und $Var $a‘;
Ausgabe : Du und Ich 1234
PHP – Variablen, Typen
Arrays
$foo = array('bar' => 'foo' web' => ‚sem ');
echo "Hallo {$foo['bar']}!"; // Hallo foo!
echo "Hallo {$foo['web']}!"; // Hallo sem!
Konstanten
define(‘bla‘,‘WebSem‘);
Echo bla;
Ausgabe : WebSem
PHP – Funktionen
function foo($i) {
return $i*2;
}
/* Weise den $a und $b beiden den Wert 5 zu */
$b = $a = 5;
/* Weise $c den doppelten Wert von $a */
$c = verdoppeln($a);
PHP - Kontrollstrukturen
If – then – else;
For-Next Schleife;
Switch – case Anweisung;
Do { Anweisung } while ($i>0);
foreach (array_expression as $key =>
$value) {Anweisung};
Verzweigung
If – then – else
<?php
if($passwort==„geheim“) {
print „Passwort gültig“;
//weitere Anweisungen
}else {
print „Passwort ungültig“;
//weitere Anweisungen
}
?>
Die For-Next-Schleife
<?php
for($y=1; $y<=30; $y++) {
print $y;
}
?>
Verzweigung
mit switch
<?php
switch(Ausdruck)
{
case ergebnis1:
//Anweisungen, wenn Ausdruck=ergebnis1
break;
...
default:
//Anweisungen, in allen anderen Fällen
?>
PHP – Include, require
Mittels include und require können wir andere
Dateien in der Datei einbinden
Die include() Anweisung bindet die Datei ein
und wertet diese aus.
Die require() genauso
Unterschiede
Umgang mit Fehlern
Require bricht ab im Gegensatz zu include
Include macht weiter und gibt eine
Fehlermeldung aus
PHP – HTTP GET/POST
HTTP GET und POST Variablen unter PHP
Formular wie gewohnt erstellen
<form method="get"
action="32_Formular_ausw.php"
name="websemget">
Unter action die php Datei angeben die die
Variablen auswerten soll.
Unter PHP gibt es 3 Arrays die erzeugt
werden
$_GET
$_POST
$_COOKIE
PHP – HTTP GET/POST
Über diese Array kann man die Variablen
auslesen.
Falls register_globals aktiviert ist, auch direkt
über den Variablennamen
$varname
Ansonsten nur
$_GET[‘varname‘]
PHP – HTTP GET/POST
Vorsicht ist aber geboten, da mann Variablen
überschreiben kann.
Dafür gibt es gpc_order (PHP3) (gpc)
variables_order (PHP4) (EGPCS)
Standardmäßig auf egpcs
ENVIRONMENT
GET
POST
COOKIE
SERVER
Damit wird definiert, falls es zwei Variablen mit dem
gleichen Namen gibt, welche bevorzugt werden soll
PHP – FILE UPLOADS
File upload in PHP
Die Formaction gibt den temporären
Dateinamen aus und die Dateigröße des
Uploads (Darf die Größe die in der PHP.INI
unter upload_max_filesize festgelegt ist, nicht
überschreiten. default-Wert liegt bei 2MB).
Diese Datei ist so erstaunlich temporär, dass
es sie nach dem Ende des Script schon gar
nicht mehr gibt: also schnell umkopieren
PHP – FILE UPLOADS
<form enctype="multipart/form-data„
method="post„
action="35_Formular_file.php">
<input name="myfile" type="file" ><br>
<input type="submit" value="Send File">
</form>
PHP – FILE UPLOADS
Variablen die zusätzlich gesetzt werden
Name : $_FILES['myfile']['name']
Mime Typ : $_FILES['myfile']['type']
Grösse : $_FILES['myfile']['size']
Temporärerer Name :
$_FILES['myfile']['tmp_name']
Ebenfalls
Name : $myfile_name
Mime Typ : $myfile_type
Grösse : $myfile_size
PHP - Cookies
Wie schicke ich Cookies und lese Sie aus.
Cookies müssen vor irgendwelchen anderen
Headern gesendet werden.
Funktion setcookie()
Name : Name
Value : Wert
Expire : Ablauf vom Cookie
path, domain, secure
Bsp.:
setcookie ("TestCookie", "bla", time()+3600);
Alles außer Name optional
PHP - Cookies
Cookies auslesen
Funktioniert über die Variablen
$HTTP_COOKIE_VARS["TestCookie"]
$TestCookie
Cookies löschen
Neusetzen des Cookies mit einer Zeit in der
Vergangenheit damit der Browser zufrieden
ist.
PHP - Sessions
PHP ist sehr vergesslich was Formvariablen
angeht
Diese sind nur in der nächsten Site gültig
Lösung mittels hidden input zu umständlich
Einfachere Lösung mittels Sessions
Nach Registrierung der Variablen sind diese
solange gültig bis die Session beendet wird.
Erkennung der Session mittels einer SID
PHP - Sessions
Starten einer Sessios mittels
session_start()
Eindeutige SID wird generiert
SID ist eine Konstante
Oder setzen mittels session_id(“sessname“)
Übergabe der SID mittels
Cookies
Im link einbauen
Registrieren der Variablen mittels
$_SESSION[‘varname‘] = Wert
PHP - Sessions
Auslesen der Variablen mittels
$_SESSION[‘varname‘]
Deregistrieren von Variablen
unset($_SESSION[‘varname‘])
SID in Formularen
<input type="hidden" name="PHPSESSID"
value="<?=session_id()?>">
Session beenden mittels
Session_unset()
$_SESSION=array()
Geschichte von OOP in PHP
PHP/FI (Form Interpreter): Entspricht PHP1
und PHP2, welche keine objektorientierten
Sprachmerkmale enthielten.
PHP 3: erster Versuch, objektorientierte
Programmierung in PHP zu ermöglichen.
PHP 4, Zend Engine 1: Verbesserte
Unterstützung für objektorientierte
Programmierung, aber stark limitiertes
Objektmodell.
PHP 5, Zend Engine 2: Java-ähnliches, von
Grund auf überarbeitetes Objektmodell.
PHP - Klassen
Der Sinn von Objektorientierung ist es nicht,
schnelle Programme zu erstellen, sondern
deren Entwicklung zu beschleunigen und vor
allem deren Erweiterbarkeit zu gewährleisten
Klassen haben :
Haben Ihre eigene Variablen
Eigene Funktionen
Man kann beliebig viele neue Objekte
erstellen
Sehr effizient mit Sessions
PHP - Klassen
PHP 3, PHP 4:
Objekte und Klassen waren zwar implementiert, aber
nicht so wie man es von OOP gewohnt ist.
Mit PHP4 kam erst die richtige OOP
Variablen nur static
Kostruktoren und Vererbung waren implementiert
PHP 5:
Mit PHP5 bricht ein neues Zeitalter für PHP ein.
Zentrale Bestandteile der OOP halten Einzug in PHP
Variablen als stativ, private, protected deklarieren
Destruktoren gibt es auch
Abstrakte Klassen und Interfaces
Exceptions model (try catch)
Rückwärtskompatibilität ??? Jaein.
PHP Beispiel : einfaches Objekt
<?php
<?php
class
class MeineKlasse
MeineKlasse
{{
public
public $eigenschaft
$eigenschaft == "" ";
";
function
function methode()
methode()
{{
echo
echo "Ich
"Ich bin
bin ein
ein
Objekt!<br>";
Objekt!<br>";
}}
}}
$objekt
$objekt == new
new MeineKlasse;
MeineKlasse;
$objekt->methode();
$objekt->methode();
$objekt->eigenschaft
$objekt->eigenschaft == Schwarz;
Schwarz;
echo
$objekt->eigenschaft;
echo $objekt->eigenschaft;
?>
?>
Die Ausgabe sieht wie folgt aus:
Ich bin ein Objekt!
Schwarz
PHP - MySQL
PHP hat eingebaute Funktionen um Verbindungen zu
MySQL Server herzustellen.
Mittels PHP baut man eine (persistente) Verbindung
zu MySQL auf.
$link = @mysql_pconnect(hostname,UN,PW)
Fehlernummer und Fehlertext abfrage mittels
mysql_errno // Liefert die Fehlernummer einer zuvor
ausgeführten Operation
mysql_error // Liefert den Fehlertext der zuvor
ausgeführten MySQL Operation
Danach muss man die Datenbank auswählen
mysql_select_db(dbname,$link)
PHP - MySQL
Nachdem die Datenbank ausgewählt wurde,
führt man die Abfrage aus.
$result = mysql_query(query, $link)
$result ist ein Zeiger auf den ersten Eintrag
Danach muss man iterativ alle Zeilen einzeln
auslesen und evtl. ausgeben
while ($row = mysql_fetch_row($result)){ … }
$row[0]…$row[anzFelder]
Nachdem man fertig ist, führt man
mysql_free_result($result) // Ergebnis freigeben
mysql_close($link) // Datenbank schließen
PHP - MySQL
Ebenfalls gibt es folgende Befehle
mysql_affected_rows // Liefert die Anzahl
betroffener Datensätze einer vorhergehenden
MySQL Operation
mysql_create_db // Erzeugt eine Datenbank
mysql_db_query // Absetzen einer Anfrage an
die Datenbank
mysql_insert_id // Liefert die Kennung einer
vorherigen INSERT-Operation
mysql_num_rows // Liefert die Anzahl der
Datensätze im Ergebnis
mysql_pconnect // Öffnete eine persistente
Verbindung zum MySQL Server
PHP – ERT Projekt
Soviel zum Thema PHP
Jetzt will ich noch ein Projekt vorstellen
ERT (Basisidee von osCommerce)
Mehrsprachig
MySQL benutzung
Klassen
User Login
PHP - Fragen
Fragen zum Vortrag???
Vielen Dank
für Ihre
Aufmerksamkeit
Quellen
http://www.php.net
http://de.wikipedia.org/wiki/Webdesign
http://de.wikipedia.org/wiki/PHP
http://www.php-faq.de/q/q-php-was.html
http://wp.netscape.com/newsref/std/cookie_s
pec.html
http://www.usegroup.de/software/phptutorial/i
ndex.html
http://www.zend.com
Herunterladen