| . |
| PHP-Kochrezepte für typische Anwendungen |
| . |
| Heinrich-Heine-Universität Düsseldorf | Universitätsrechenzentrum |
|
Vorbemerkung
|
PHP ist ein Interpreter-Programm, das auf einem WWW-Server abgelegte
Web-Dokumente dynamisch, also zur Zeit der Zugriffe durch einen Client,
aufbereitet. Die PHP-Dokumente enthalten i.d.R. Text und HTML-Markup wie
normale - statische - HTML-Dokumente, zusätzlich aber einen
Programm-Sourcecode in der PHP-Interpretersprache, der von dem PHP-Programm
interpretiert und ausgeführt wird und z.B. an der Stelle seines Auftretens
variable Teile einer HTML-Seite erzeugt.
Aufgrund der zahlreichen Möglichkeiten von PHP, vor allem seiner Vielzahl von Standardfunktionen, beschränken sich die Anwendungen nicht auf variable Bestandteile in Dokumenten. Genauso können Formulareingaben ausgewertet und in Dateien oder ggf. Datenbanken hinterlegt werden. Einiges davon sollen die folgenden Beispiele illustrieren. Die Beispiele sollen auch als "Kochrezepte" für eigene Anwendungen dienen - zum Verwenden und Anpassen, ohne alle Details der Interpretersprache kennen zu müssen, Dieses Dokument hat die Version PHP 3 zum Inhalt und besteht aus einer Überarbeitung und Anpassung meiner älteren Kochrezepte für PHP 2. Für eine vollständige Dokumentation von PHP 3 sei auf die Heimatseite von PHP verwiesen oder den deutschen Mirror mit dem Online-Manual. |
|---|---|
|
Voraussetzung für die Verwendung von PHP allgemein
|
Es gibt zwei Möglichkeiten der Nutzung von PHP für eigene Seiten:
|
|
... und so können Sie die Rezepte für eigene Anwendungen nutzen...
|
Hinweis: Die folgenden Ausführungen gelten so genau zunächst nur für
diejenigen, die auf www.uni-duesseldorf.de eigene Seiten betreuen
oder eine private Homepage auf
www-public.rz.uni-duesseldorf.de besitzen.
Vieles sollte aber so oder ähnlich auch für andere nutzbar sein, wenn die
im vorhergehenden Abschnitt genannte Grundvoraussetzung erfüllt ist.
In Zweifelsfällen wenden Sie sich an Ihren Webmaster!
Und hier die einzelnen Schritte:
|
| Kochrezept | 1 | : Tagesdatum auf der Seite |
|---|
<HTML>
<HEAD><TITLE>PHP-Kochrezept 1: Tagesdatum auf der Seite</TITLE>
</HEAD>
<BODY BGCOLOR="#ffffff" TEXT="#000000" LINK="#0000ff" VLINK="#800080" ALINK="#ff0000">
<H1>PHP-Kochrezept 1: Tagesdatum auf der Seite</H1>
<? echo "Heute ist der ", Date("d.m.Y"), "; es ist ", Date("H:i:s"), " Uhr."; ?>
<HR NOSHADE SIZE=2>
<A HREF="Welcome.php3">PHP-Kochrezepte</A> von
<A HREF="/~cappel/">Bernd Cappel</A>; Nr. 1 zuletzt geändert am
<? Echo Date("d.m.Y",getlastmod()); ?>
</BODY>
</HTML>
|
|
Anmerkungen
|
|
|---|
| Kochrezept | 2 | : Eine Seite mit bedingtem Inhalt |
|---|
<HTML>
<HEAD><TITLE>PHP-Kochrezept 2: Bedingter Inhalt</TITLE>
</HEAD>
<BODY BGCOLOR="#ffffff" TEXT="#000000" LINK="#0000ff" VLINK="#800080" ALINK="#ff0000">
<H1>PHP-Kochrezept 2: Bedingter Inhalt</H1>
Dieser Abschnitt ist immer sichtbar.
<P>
<?
$ip = GetEnv("REMOTE_ADDR");
if (ereg("^134\.99\.",$ip)):
?>
Dieser Absatz ist nur sichtbar bei einem Zugriff von einer IP-Adresse,
die mit 134.99. beginnt.
<? endif; ?>
<HR NOSHADE SIZE=2>
<A HREF="Welcome.php3">PHP-Kochrezepte</A> von
<A HREF="/~cappel/">Bernd Cappel</A>; Nr. 2 zuletzt geändert am
<? Echo Date("d.m.Y",getlastmod()); ?>
</BODY>
</HTML>
|
|
Anmerkungen
|
|
|---|
| Demonstration "TRUE" | in diesem Fenster | in neuem Fenster |
|---|---|---|
| Demonstration "FALSE | in diesem Fenster | in neuem Fenster |
| Kochrezept | 3 | : Formulareingabedaten als Mail verschickt |
|---|
<?
$addr = GetEnv("REMOTE_ADDR");
$host = GetEnv("REMOTE_HOST");
$body = "Aufgegeben von Host " . $host . ", IP-Adresse " . $addr . "\n\n";
if (IsSet($Name)) { $body = $body . "Name: " . $Name . "\n"; }
if (IsSet($EMail)) { $body = $body . "EMail: " . $EMail . "\n"; }
if (IsSet($TelNr)) { $body = $body . "TelNr: " . $TelNr . "\n"; }
$comment1 = str_replace("\015\n","\n",$comment);
$body = $body . str_replace("\015","\n",$comment1);
mail("webmaster@uni-duesseldorf.de","Briefkasten",$body);
?>
<HEAD>
<TITLE>Ihre Mitteilung</TITLE>
</HEAD>
<BODY>
<H1>Nachricht erfolgreich abgeschickt!</H1>
Vielen Dank für Ihre Nachricht!
<P>
</BODY>
|
|
Anmerkungen
|
Ein häufiger Anwendungsfall von Eingabeformularen in HTML ist, seinen
Leserinnen und Lesern einen Weg anzubieten, Mitteilungen abzuschicken,
auch wenn sie selbst keine Mail-Adresse und keinen Mail-Zugang
besitzen. Wie das mit PHP leicht zu realisieren ist, zeigt dieses Beispiel.
Das Beispielformular ist dem Elektronischen Briefkasten der Universitäts- und Landesbibliothek Düsseldorf entlehnt. Die Formularseite ist ein reines HTML-Dokument; die PHP-Seite wird im ACTION-Attribut des FORM-Elementes in dieser Seite angesprochen: <FORM ACTION="3.php3" METHOD=POST>In der PHP-Seite 3.php3 wird aus den eingegebenen Werten eine Mail aufbereitet und abgeschickt:
|
|---|
| Kochrezept | 4 | : Datensammlung über ein Formular in einer Datei |
|---|
<HTML>
<HEAD>
<TITLE>PHP-Kochrezept 4: Datenerfassung über Formular in einer Datei gesammelt
</TITLE>
</HEAD>
<BODY BGCOLOR="#ffffff" TEXT="#000000" LINK="#0000ff" VLINK="#800080" ALINK="#ff0000">
<H1>PHP-Kochrezept 4: Datenerfassung über Formular in einer Datei gesammelt</H1>
<? if (isSet($name) && ereg("[a-zA-Z]+", $name)
&& isSet($vorname) && ereg("[a-zA-Z]+", $vorname)
&& isSet($strasse) && ereg("[a-zA-Z]+", $strasse)
&& isSet($ort) && ereg("[a-zA-Z]+", $ort)) {
$date = Date("d.m.y H:i ");
$host = GetEnv("REMOTE_HOST");
$data = sprintf(
"%s %s\n\tName:\t\t%s\n\tVorname:\t%s\n\tStrasse:\t%s\n\tPLZ/Ort:\t%s %s",
$date,$host,$name,$vorname,$strasse,$plz,$ort);
if (IsSet($email) && ereg("[a-zA-Z]+", $email)) {
$data .= sprintf("\n\tEMail:\t\t%s",$email);
}
$fp = fopen("/home/cappel/test.dat","a");
fputs($fp,$data);
fputs($fp,"\n\n");
fclose($fp);
?>
Folgende Daten wurden aufgenommen:
<PRE>
<? Echo $data; ?>
</PRE>
<P>
<? } else { ?>
In diesem Beispiel werden natürlich keine echten Daten für einen echten
Zweck gesammelt; wenn Sie die Funktionalität testen möchten, geben Sie am
besten Phantasiedaten ein, die keinen wirklichen Personen entsprechen.
<BR>
Die Adressen werden nicht zu anderen Zwecken benutzt oder weitergegeben.<BR>
Ihre Eingaben können nur berücksichtigt werden, wenn Name, Vorname, Straße
und Ort angegeben sind.<BR>
<FORM ACTION="4.php3" METHOD=POST>
<TABLE BORDER=0>
<TR>
<TD COLSPAN="2" ALIGN=RIGHT>
Name <INPUT NAME="name" TYPE="text" SIZE="30">
Vorname <INPUT NAME="vorname" TYPE="text" SIZE="24"><P>
<TR>
<TD COLSPAN="2" ALIGN=RIGHT>
Straße und H-Nr.<INPUT NAME="strasse" TYPE="text" SIZE="56"><BR>
<TR>
<TD COLSPAN="2" ALIGN=RIGHT>
Plz <INPUT NAME="plz" TYPE="text" SIZE="6">
Ort <INPUT NAME="ort" TYPE="text" SIZE="51"><P>
<TR>
<TD ALIGN=RIGHT>
E-Mail <INPUT NAME="email" TYPE="text" SIZE="30"><BR>
<TR>
<TD COLSPAN="2" ALIGN=RIGHT>
<INPUT TYPE="SUBMIT" VALUE="Ab geht's!">
</TABLE>
</FORM>
<? } ?>
<BR>
<HR NOSHADE SIZE=2>
<A HREF="Welcome.php3">PHP-Kochrezepte</A> von
<A HREF="/~cappel/">Bernd Cappel</A>; Nr. 4 zuletzt geändert am
<? Echo Date("d.m.Y",getlastmod()); ?>
</BODY>
</HTML>
|
|
Anmerkungen
|
|
|---|
| Kochrezept | 5 | : Dynamische Bildverarbeitung |
|---|
<?php
Header("Content-Type: image/png");
$image = @ImageCreatefromPng($file);
if ($image == ""):
$image = ImageCreate(250,30);
$bgc = ImageColorAllocate($image,255,255,255);
$txc = ImageColorAllocate($image,0,0,0);
ImageFilledRectangle($image,0,0,250,30,$bgc);
ImageString($image,3,5,5,"Fehler bei Zugriff auf $file",$txc);
ImagePng($image);
ImageDestroy($image);
exit;
endif;
$lnc = ImageColorAllocate($image,255,255,255);
$xmx = ImageSX($image) - 1;
$ymx = ImageSY($image) - 1;
ImageLine($image,0,$y,$x - 5,$y,$lnc);
ImageLine($image,$x + 5,$y,$xmx,$y,$lnc);
ImageLine($image,$x,0,$x,$y - 5,$lnc);
ImageLine($image,$x,$y + 5,$x,$ymx,$lnc);
ImagePng($image);
ImageDestroy($image);
?>
|
|
Anmerkungen
|
Dies ist ein Beispiel für ein PHP-Programm, das keine HTML-Seite, sondern
eine Grafik im PNG-Format erzeugt.
Deshalb darf die PHP-Quelle auch keinen HTML-Code oder Text außerhalb der
Klammerung des Skript-Codes enthalten (hier in der Variante
<?php ... ?>) und die erste Ausgabe über die Funktion
header muss
die HTTP-Response-Header-Zeile zur Festlegung des Dokumententyps - hier
image/png - sein.
Die Image-Funktionen von PHP basieren - so vorhanden in der jeweiligen Installallation - auf der GD-Bibliothek von Thomas Boutell. Diese erzeugt und verarbeitet in der aktuellen Version keine GIF-Grafiken mehr, sondern solche im JPEG- oder PNG-Format.
|
|---|