Einleitung
PHP Überblick
PHP Sprache
PHP Pakete
Beispiele
Server Side Includes (SSI)
LiveWire
von Netscape
PHP/FI 2.0:
Personal Home Pages / Forms Interpreter
PHP 3.0:
PHP Hypertext Preprocessor
aktuell: PHP 4.0:
PHP Hypertext Preprocessor mit Zend
Vergleichbare Ansätze:
ASP Active Server Pages (MS)
JSP Java Server Pages
CGI Programm oder
Apache Modul
gute Datenbank Unterstützung
Einbettung von Programmen in HTML
aber auf der Seite des Web-Servers
die Clients sehen nur noch die Ergebnisse
als SGML Anwendung:
<?php ...Programm... ?>
als Script:
<SCRIPT LANGUAGE="php">...</SCRIPT>
bei Livewire:
<server>...</server>
Einbettung:
<html> <head> <title>Test</title> </head><body> Test auf PHP: <?php echo "<p>Hallo von PHP</p>"; ?> <?php echo "<p>$HTTP_USER_AGENT</p>"; ?> <?php show_source("hallo.phtml"); ?> </body>
Ausgabe:
Test auf PHP: Hallo von PHP Mozilla/4.5 [en] (X11; I; Linux 2.0.35 i586) ...
PHP 4:
höhere Performance durch Kompilation
HTTP Sessions eingebaut
bessere Portabilität, auch für MS
Die Syntax ist von C, Java und Perl abgeleitet.
Konversion von Zahlen und Strings ist von Kontext abhängig.
explizite Anpassung mit Casts:
(int)
, (double)
, (string)
.
Keine Deklarationspflicht für Variablen. aber
static $x = "Hallo !\n";
local $x = "Hallo !\n";
global $x;
Operatoren und Ausdrücke wie in C. y += x--
Zugriff auf Umgebungsvariablen etc.
$GLOBALS[´HTTP_REFERER´]
In neuen Versionen von PHP (ab 4.2.x) ist defaultmässig kein
Zugriff auf CGI Variablen mit $cginame
mehr möglich, es geht nur noch
$_GET[´cginame´]
für GET Variablen
$_POST[´cginame´]
für POST Variablen
$_REQUEST[´cginame´]
für GET und POST Variablen
$_SERVER[´HTTP_REFERER´]
für andere Variablen,
wie auch QUERY_STRING
$foo = "0"; $foo++; $foo += 1; $bar = (string) $foo; $foo = (int) $bar; $a = "b"; $$a = "c"; echo $b;
Statements, Expressions,
{
Statement-Folge }
if-Statement
if (condition1) statement1 [ elseif (condition2) statement2 ] [ else statement3 ]
if (condition): endif
for-Statement
for ([initial-expression]; [condition]; [increment-expression]) statement
while-Statement
while (condition) { statement }
while (condition): endwhile
do { statement } while (condition)
Zum Beenden von Schleifen
break
Wahrheitswerte wie in Perl.
TRUE: Zahl ungleich 0
, nicht-leere Zeichenketten,
nicht-leere Objekte
und FALSE: 0
, ""
,
leere Objekte
PHP Programme und HTML Texte dürfen sich Überlappen.
<?php if ($a == 9): ?> <p>Text falls der Wert 9 ist.</p> <?php endif; ?>
Funktionen.
function tuwas($a) { echo "Eingabe = ", $a; } tuwas("mit einem Text");
function tuwas($a) { return "Eingabe = " . $a; } echo tuwas(´mit einem Text´);
Adabas D
Arrays, Felder
BC, beliebig genaue Arithmetik
Kalender
Datum, Zeit
dBase
dbm
Directories, Verzeichnisse
Aufrufe externer Programme
filePro
Filesystem, Dateisystem
HTTP, Cookies
Bildbearbeitung, -erzeugung
IMAP, Email
Informationen über PHP
LDAP Verzeichnisdienst
Mathematische Funktionen
mSQL
MySQL
Sybase
Netzwerk, Sockets
ODBC
Oracle
PostgreSQL
Regular Expressions
Solid
SNMP
Strings, Zeichenketten
URL Bearbeitung
Datentypen
Ursprünglich von Berkeley, db, gdbm.
Auf (fast) allen Unix Systemen ohne Installation verfügbar.
nur (Key, Value)-Paare
Datenbank Identifikation
int dbmopen(filename,"rwn")
dbmclose(db-identifier)
Zugriff auf Werte
bool dbmexists(db-identifier, key)
string dbmfetch(db-identifier, key)
bool dbmdelete(db-identifier, key)
string dbmfirstkey(db-identifier)
string dbmnextkey(db-identifier, key)
Einfügen von Werten
bool dbminsert(db-identifier, key, value)
bool dbmreplace(db-identifier, key, value)
dbm-artige API für PHP4
unterstützt mehrere reale Implementierungen: dbm, ndbm, gdbm, db2, db3, cdb
Auf (fast) allen PHP Systemen existiert eine der DBs
wie dbm nur (Key, Value)-Paare
Datenbank Identifikation
int dba_open(filename,"rwnc","handler")
handler = dbm, ndbm, gdbm, db2, db3, cdb
siehe phpinfo()
dba_close(db-handle)
Zugriff auf Werte
bool dba_exists(key, db-handle)
string dba_fetch(key, db-handle)
bool dba_delete(key, db-handle)
string dba_firstkey(db-handle)
string dba_nextkey(db-handle)
Einfügen von Werten
bool dba_insert(key, value, db-handle)
bool dba_replace(key, value, db-handle)
Erweiterungen gegenüber dbm
int dba_popen(filename,"rwnc","handler")
p=persistent, handler
wie oben
bool dba_optimize(db-handle)
bool dba_sync(db-handle)
Einbettung mittels auto_prepend
,
oder direkt in die Seite
Verwendung
<?php /* $counter_start="9999"; */ echo "<h3>" . counter(). " Zugriffe,"; echo " " . modified("de") . "</h3>"; ?>
Counter Funktion
$filename=$SCRIPT_FILENAME; $counter_start="1"; function counter() { global $filename, $counter_start; $counter_dir="/tmp/"; $counter_db=$counter_dir . "zaehler.dbm"; if (file_exists("$counter_db")) { $db=dbmopen($counter_db,"w"); if ( dbmexists($db,$filename) ) { $cnt=dbmfetch($db,$filename); if ($counter_start=="1") { $cnt++; } else { $cnt=$counter_start; } dbmreplace($db,$filename,$cnt); } else { $cnt=$counter_start; dbminsert($db,$filename,$cnt); } dbmclose($db); return "$cnt"; } else { echo "Attempt to create file: " . $counter_db; $cnt=$counter_start; $db=dbmopen($counter_db,"n"); dbminsert($db,$filename,$cnt); dbmclose($db); return "$cnt"; } }
Modified Funktion
$filename=$SCRIPT_FILENAME; function modified($lang) { global $filename; $lm=date("d M Y H:i:s",filectime($filename)); if ($lang=="de") { return "Geändert am $lm"; } else { return "Last modified: $lm"; } }
Verwendung wie oben
Counter Funktion
$filename=$SCRIPT_FILENAME; $counter_start="1"; function counter() { global $filename, $counter_start; $counter_dir="/tmp/"; $counter_db=$counter_dir . "zaehler.dbm"; if (file_exists("$counter_db")) { $db=dba_open($counter_db,"w","gdbm"); if ( dba_exists($filename,$db) ) { $cnt = dba_fetch($filename,$db); if ($counter_start=="1") { $cnt++; } else { $cnt=$counter_start; } dba_replace($filename,$cnt,$db); } else { $cnt=$counter_start; dba_insert($filename,$cnt,$db); } dba_close($db); return "$cnt"; } else { echo "Attempt to create file: " . $counter_db; $cnt=$counter_start; $db=dba_open($counter_db,"n","gdbm"); dba_insert($filename,$cnt,$db); dba_close($db); return "$cnt"; } }
Modified Funktion wie oben
Auf jedem Web-Server as CGI Programm
zum Beispiel bei Apache:
AddType application/x-php3-script .phtml Action application/x-php3-script /cgi-bin/php/
bei Apache als ladbares Modul
Aktivierung einzelner Datenbanken und Pakete
Weitere Direktiven z.B. in php3.ini
oder
in Apache Konfigurationsfiles mit Prefix php3_
oder im Code
Automatisches Hinzufügen
auto_append_file
string
auto_prepend_file
string
Fehleranzeige
display_errors
bool
error_log
string
Reihenfolge der Variablen, Get, Post, Cookies
gpc_order
string, z.B. "GPC"
track_vars
bool
PHP 4 Apache Direktiven:
php_value [PHP directive name] [value] php_flag [PHP directive name] [On|Off] php_admin_value [PHP directive name] [value] php_admin_flag [PHP directive name] [On|Off]
sollten mit neuen Versionen behoben sein
Auslieferung von Dateien
http://host/cgi_bin/php?/etc/passwd
http://host/cgi_bin/php/etc/passwd
Redirekt
--enable-force-redirect
Setzen der Verzeichnisse
doc_root
,
user_root
Auslagern des Interpreters
#!/usr/local/bin/php
LiveWire
Servlets
Java Server Pages (JSP)
© Universität Mannheim, Rechenzentrum, 1998-2002.
Heinz Kredel Last modified: Fri Nov 29 10:11:28 CET 2002