| <- Vorlesung 5 | Übungen | Vorlesung 7 -> |
Wie im letzten Abschnitt angekündigt, können wir - zumindest auf speziell konfigurierten Computern - auch mit GD-Versionen größer 1.6 GIF-Bilder erzeugen. Dazu verwenden wir den Befehl convert aus dem Paket ImageMagick, mit dem wir nahezu jedes Bild-Format in jedes andere umwandeln können. Dieses Programm convert liegt (auf dem Übungs-Rechner) im Verzeichnis /usr/X11R6/bin.
Wir gehen nun so vor: Zuerst erzeugen wir ein PNG-Bild wie bisher. Dieses PNG-Bild schicken wir nicht an den Betrachter, sondern speichern es unter dem Namen z123.png in dem Verzeichnis /tmp.
... ImagePNG($im,"/tmp/z.png");Nun rufen wir aus PHP das Programm convert mit der Datei /tmp/z.png und schicken das erzeugte Bild direkt weiter an den Betrachter:
passthru("/usr/X11R6/bin/convert /tmp/z.png gif:-");
Zu guter Letzt müssen wir /tmp/z.png wieder löschen:
unlink("/tmp/z.png");
Insgesamt sieht das Programm so aus:
Header("Content-type: image/gif");
$im = ImageCreateFromPng("vec.png");
$textfarbe = ImageColorAllocate ($im, 0x00, 0x00, 0xff);
ImageTTFText ($im, 30, 0, 20, 50, $textfarbe,
"/usr/X11R6/lib/X11/fonts/truetype/comic.ttf",
"Hallo");
ImagePNG($im,"/tmp/z.png");
passthru("/usr/X11R6/bin/convert /tmp/z.png gif:-");
ImageDestroy($im);
unlink("/tmp/z.png");
Nicht zu vergessen ist, im Header-Befehl
image/png in image/gif
umzuwandeln.
Natürlich können wir jederzeit auch ein JPEG-Bild erzeugen:
Header("Content-type: image/jpeg");
$im = ImageCreateFromPng("vec.png");
$textfarbe = ImageColorAllocate ($im, 0x00, 0x00, 0xff);
ImageTTFText ($im, 30, 0, 20, 50, $textfarbe,
"/usr/X11R6/lib/X11/fonts/truetype/comic.ttf",
"Hallo");
ImagePNG($im,"/tmp/z.png");
passthru("/usr/X11R6/bin/convert /tmp/z.png jpeg:-");
ImageDestroy($im);
unlink("/tmp/z.png");
Ein weiterer interessanter Befehl zur Bildbearbeitung, der in der GD-Bibliothek enthalten ist, ist der Befehl ImageCopyResized(). Damit können Sie Bilder auf Server-Seite vergrößern oder verkleinern. Eine Anwendung dafür wäre zum Beispiel das Erzeugen von Thumbnails auf Knopfdruck:
Header("Content-type: image/png");
$im = ImageCreateFromPng("vec.png");
$im_neu=ImageCreate(50,30);
ImageCopyResized($im_neu,$im,
0,0,0,0,
50,30,ImageSX($im),ImageSY($im));
ImagePNG($im_neu);
ImageDestroy($im);
ImageDestroy($im_neu);
In diesem Beispiel kopieren wir das Bild $im in das Bild
$im_neu, das wir vorher mit ImageCreate erzeugen
mussten. Das neue Bild wird aber auf die Größe 50x30 verkleinert.
Die Eingabe-Parameter von ImageCopyResized() haben
folgende Bedeutung:
Cookies bestehen aus folgender Information:
Beispiel:
Wir wollen feststellen, ob ein Betrachter eine Seite schon einmal
aufgerufen hat.
Dazu setzen wir beim ersten Aufruf der Seite ein Cookie.
Dies muß allerdings vor dem HTML-Head geschehen, d.h.
am Anfang der Datei. (Unbedingt auch die Ausgabe von Leerzeilen, -zeichen
vor diesem PHP-Teil vermeiden!)
Das Verfallsdatum des Cookie muß in Sekunden seit dem 1. Januar 1970
angegeben werden.
Die Funktion time() gibt die Sekunden seit dem 1. Januar 1970 der
momentanen Zeit an. Weitere Datums- und Zeitfunktionen sind
im
Handbuch
nachzulesen.
Da die Berechnung der Sekunden nicht immer ganz übersichtlich ist, empfiehlt
sich die Verwendung einer Funktion:
Es gibt Einschränkungen für die Zahl an Cookies, die ein Browser verwaltet:
Bei Netscape sind es 300 Cookies insgesamt, wobei jedes Cookie maximal
4 KiloBytes gro sein darf. Pro Server dürfen höchstens 20 Cookies
gespeichert werden.
Cookies lesen ist mit PHP wieder sehr einfach realisiert:
Der Inhalt des Cookies ist in einer Variablen
mit dem Namen des Cookies enthalten:
Ein Server kann mit PHP ein Cookie wieder entfernen, indem
lediglich der Befehl setcookie mit dem Namen des Cookies als
Argument angegeben wird:
Anmerkung:
Die Priorität dieser Varaibalen wird in php.ini vom
Administrator festgelegt.
Es gibt 5 verschiedene Quellen für "automatische" Variable:
23) Cookies
Als Cookies werden kurze Informationen bezeichnet,
die der WWW-Server beim Client (Betrachter) hinterlassen kann.
Sie sind vor allem beim elektronischen Einkaufen im WWW von Bedeutung.
Genauer gesagt, sind sie immer dann von Bedeutung, wenn der Server
weitergehende Information vom Betrachter haben muß,
als nur die Internet-Adresse, die eine Seite anfordert.
Will man weder ein Verfallsdatum setzen (dann erlischt die Gültigkeit des
Cookies beim Beenden des Browsers), noch den Zugriff auf das Cookie
einschränken, so genügt es, setCookie(Name,Wert)
aufzurufen.
<?
$t = time()+3600*24*10;
SetCookie("mycookie","Schon besucht",$t,"/test",".de");
?>
<HTML>
...
Dieser Befehl setzt ein Cookie mit dem Namen
mycookie auf den Wert "schon besucht" mit einem
Verfallsdatum von 10 Tagen. Lesen darf dieses Cookie jeder Server
mit der Endung .de, allerdings nur aus Dateien, die in einem
Verzeichnis /test oder Unterverzeichnissen davon liegen.
function tage ($anzahl) {
$sekunden = time()+ 3600 * 24 * $anzahl;
return $sekunden;
}
SetCookie("mycookie","Schon besucht",tage(10),"/test",".de");
echo "$mycookie";
gibt also den Wert des Cookies aus, in unserem Fall
den Text "Schon besucht".
SetCookie("mycookie");
Zu beachten sind weiterhin zwei Dinge:
Der Leser wird sich vielleicht mittlerweile fragen, ob PHP mit all den
"automatischen" Variablen noch zurechtkommt. Denn es könnte
ja eine Variable $name existieren, die aus einem
Formular stammt, es könnte auch ein Cookie mit dem Namen
name gesetzt sein, etc.
Momentan ist der Übungs-Rechner auf EGPCS eingestellt.
Die Variablen werden von links nach rechts gesetzt. Das heißt, C wird nach
P gesetzt und daher würde die Cookie-Variable $name die
Formular-Variable $name überschreiben.
| <- Vorlesung 5 | Übungen | Vorlesung 7 -> |