Rheinwerk Computing < openbook > Rheinwerk Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

Inhaltsverzeichnis
Geleitwort
Vorwort
1 PEAR – Einführung
2 Authentication
3 Caching
4 Date and Time
5 File Formats
6 HTTP
7 Internationalization
8 Mail
9 Networking
10 PHP
11 Text
12 Web Services
13 Benchmarking
14 Configuration
15 Database
16 File System
17 HTML
18 Images
19 Logging
20 Math
21 Numbers
22 Tools and Utilities
23 XML
24 Selbst Pakete erstellen
25 PECL
Index
Ihre Meinung?

Spacer
 <<   zurück
PHP PEAR von Carsten Möhrke
Anwendung und Entwicklung – Erweiterungen für PHP schreiben
Buch: PHP PEAR

PHP PEAR
798 S., 39,90 Euro
Rheinwerk Computing
ISBN 3-89842-580-0
gp 5 File Formats
  gp 5.1 Contact_Vcard_Build
  gp 5.2 Contact_Vcard_Parse
  gp 5.3 MP3_ID
  gp 5.4 Archive_Tar
  gp 5.5 File_Passwd
    gp 5.5.1 Grundsätzliche Funktionsweise
    gp 5.5.2 .htpasswd-Dateien
    gp 5.5.3 Unix-User verwalten
    gp 5.5.4 Samba-Passwort-Dateien
    gp 5.5.5 CVS-Passwort-Dateien
  gp 5.6 File_HtAccess
  gp 5.7 Spreadsheet_Excel_Writer
    gp 5.7.1 Arbeitsblätter
    gp 5.7.2 Tabellenfelder
    gp 5.7.3 Drucken
  gp 5.8 File_PDF

5 File Formats

In PEAR sind verschiedenste Pakete zur Verarbeitung von unterschiedlichen Dateiformaten definiert. Diese Klassen sind ungemein hilfreich, wie ich immer wieder feststellen muss. Zwar ist die Anzahl der Klassen noch nicht sehr groß, aber erfreulicherweise wächst sie ständig.


Rheinwerk Computing

5.1 Contact_Vcard_Build  toptop


Besprochene Version: 1.1 Lizenz: PHP-Lizenz
Klassendatei(en): Contact_Vcard_Build.php

Dieses Paket ermöglicht es Ihnen, auf einfachem Wege vCard-Dateien zu erstellen. Bei vCard-Dateien handelt es sich um virtuelle Visitenkarten, die zum Austausch von Kontaktinformationen dienen. Die Dateien, die mit der Dateiendung .vcf abgespeichert werden, können z. B. an E-Mails angehängt werden. E-Mail-Clients wie Outlook können diese dann automatisch importieren, so dass der Kontakt dann dem Adressbuch direkt hinzugefügt werden kann. Bei einer solchen Visitenkarte handelt es sich um eine Text-Datei, die z. B. so aussehen kann:

BEGIN:VCARD 
VERSION:2.1 
N:Möhrke;Carsten 
FN:cmoehrke@netviser.de 
ORG:[netviser] Internet Beratung e.K. 
TEL;WORK;VOICE:0521 /9116046 
TEL;CELL;VOICE:+49 (0171) 6508784 
TEL;WORK;FAX:0521 / 9116047 
ADR;WORK:;;Am Rehwinkel 29;;NRW;33619;D 
EMAIL;PREF;INTERNET:cmoehrke@netviser.de 
REV:20041031T110624Z 
END:VCARD

Die hier dargestellte Visitenkarte liegt in der Version 2.1 vor, die vom Internet Mail Consortium definiert wurde. Inzwischen existiert allerdings die Version 3.0, die durch die Internet Society (ISOC) definiert wurde. Auch wenn das Paket beide Varianten unterstützt, werde ich mich nachfolgend auf die Version 3 beziehen, da diese seit 1998 definiert ist und von halbwegs aktueller Software ohne Probleme unterstützt wird.

Bei einer solchen Visitenkarte handelt es sich standardmäßig um eine normale Text-Datei, die im US-ASCII-Zeichensatz vorliegt. Möchten Sie einen anderen Zeichensatz nutzen, so muss das dem Client bei der Übertragung mithilfe des MIME-Headers übermittelt werden. Eine Möglichkeit, den Zeichensatz in der Datei selbst zu vermerken, wie das in Version 2.1 noch vorgesehen war, existiert nicht.

Jede Zeile beinhaltet eine Information, die durch den Bezeichner am Anfang der Zeile spezifiziert wird. Leider kann ich hier nicht alle Elemente erläutern; Sie können diese aber im zuständigen RFC 2426 [http://www.ietf.org/rfc/rfc2426.txt ] nachlesen. Nach der Typ-Definition wie N oder FN können sich noch weitere Attribute anschließen, die die enthaltene Information weiter spezifizieren. So können Sie mithilfe der Parameter festlegen, ob es sich um eine private Telefonnummer oder einen Firmenanschluss handelt. Innerhalb einer Zeile gelten der Doppelpunkt (:), das Semikolon (;) und das Komma (,) als Sonderzeichen. Sollten diese Zeichen also in einem Wert enthalten sein, der in der Visitenkarte gespeichert werden soll, dann müssen sie mit einem vorangestellten Backslash (\) entwertet werden. Hierfür ist die statische Methode escape() [Die Methode ist in der Version 1.1 der Klasse noch fehlerhaft. Ein Doppelpunkt wird nicht entwertet. ] vorgesehen, die eine Variable, die einen String enthält, oder ein Array mit Strings übergeben bekommt und die enthaltenen Sonderzeichen direkt entwertet. Wenn Sie also unbekannte Daten aus einem Formular oder einer Datenbank übernehmen, sollten Sie diese zuvor mit escape() bearbeiten.

require_once 'Contact_Vcard_Build.php'; 
Contact_Vcard_Build::escape($_POST["Vorname"]);

Bitte beachten Sie hierbei, dass die Methode eine Referenz auf die übergebende Variable nutzt und somit nicht mit Konstanten arbeiten kann.

In der Version 3.0 einer vCard wird jede Zeile mit einem einfachen Zeilenumbruch (\n) abgeschlossen; Version 2.1 nutzt hierzu noch ein CRLF (\r\n). Da die Breite einer Zeile auf 75 Zeichen beschränkt ist, können Zeilen umbrochen werden. Dies wird durch einen Zeilenumbruch mit einem anschließenden Leerzeichen verdeutlicht.

Der Konstruktor, der wie der Rest der Klasse in der Datei Contact_Vcard_Build.php definiert ist, benötigt keine Parameter. Möchten Sie eine Datei in der Version 2.1 erzeugen, können Sie dem Konstruktor allerdings die Versionsnummer 2.1 übergeben. Für jedes der Elemente, wie Name, Telefon etc., das in einer vCard enthalten sein kann, steht jeweils eine Methode zur Verfügung, um die Daten zu schreiben. Hierbei ist zu beachten, dass einige Datensätze nur exakt einmal vorhanden sein dürfen. So kann es immer nur einen Namen geben, da eine Person logischerweise nur einen Nachnamen haben kann. Wenn Sie versuchen, ein Element, das nur einmal genutzt werden darf, mehrfach hinzuzufügen, übernimmt die Klasse jeweils nur das letzte. Eine Adresse kann aber beispielsweise mehrfach auftauchen, da es z. B. eine Firmen-, eine Privat- und eine Postadresse geben könnte.

Alle Methoden der Klasse, die einen Fehler verursachen können, generieren ein PEAR_Error-Objekt, wobei die Fehlermeldung sofort auf dem Bildschirm ausgegeben wird.

require_once 'Contact_Vcard_Build.php'; 
 
$vcard = new Contact_Vcard_Build(); 
// Kompletten Namen festlegen 
$vcard->setName('Simpson','Homer', 
                      'Jay','Herr','der Erste'); 
// Namen zum Anzeigen festlegen 
$vcard->setFormattedName("Homi Simpson"); 
// Karte an den Client schicken 
$vcard->send("Homer_Simpson.vcf");

Listing 5.1 Generieren einer einfachen Visitenkarte

In Listing 5.1 finden Sie ein einfaches Beispiel. Nachdem das neue vCard-Objekt generiert worden ist, wird der Name der Person mit der Methode setName() geschrieben. Diese Methode setzt die »N-Komponente«, die erforderlich ist, weil die Karte sonst ungültig ist. Der erste Parameter ist der Nachname, gefolgt von dem Vornamen. Danach schließen sich weitere Vornamen, die Anrede und eventuelle Namenszusätze wie »junior«, »senior«, »der Erste« oder ähnliche an. Akademische Titel wie »Dr.« oder »Dipl.-Ing.« werden üblicherweise mit in der Anrede abgelegt. Alle fünf Parameter sind obligatorisch, sollten Sie also für einen keinen Wert haben, müssen Sie einen leeren String übergeben.

Die Methode setName() legt den »Anzeigenamen« fest, unter dem die Visitenkarte in einem Adressbuch angezeigt wird. Auch diese Methode muss aufgerufen werden, weil die Datei sonst ungültig wäre. Allerdings benötigt sie nicht unbedingt einen Parameter wie in diesem Beispiel. Bleibt der Platz zwischen den Klammern leer, wird der Anzeigename aus dem Vornamen, dem Nachnamen und dem Namenszusatz generiert. Dazu muss die Methode setName() allerdings vor dem Aufruf von setFormattedName() aufgerufen werden.

In diesem Beispiel wird die Karte mithilfe der Methode send() direkt an den Client geschickt. Der Dateiname, der ihr übergeben wird, wird an den Client gesendet, so dass dieser am Datei-Suffix .vcf erkennen kann, um welchen Dateityp es sich handelt. Möchten Sie eine Visitenkarte als Datei speichern, weil sie beispielsweise an eine E-Mail angehängt werden soll, leistet die Methode fetch() gute Dienste. Sie liest die gesamte vCard aus und liefert sie als String zurück.

$card_content=$vcard->fetch(); 
file_put_contents("Bart_Simpson.vcf",$card_content);

Um der Visitenkarte eine Adresse hinzuzufügen, ist die Methode addAddress() vorgesehen. Wie Ihnen vielleicht aufgefallen ist, beginnt der Name dieser Methode mit add und nicht mit set, was ein Hinweis darauf ist, dass mehrere Adressen und nicht nur eine zulässig sind.

Die Methode bekommt sieben Parameter übergeben, die alle angegeben werden müssen. Der erste Parameter ist die Postfachnummer, die allerdings mit Vorsicht zu genießen ist, da sie von einigen »Adressbuch-Systemen« wie Outlook anscheinend ignoriert wird. Der zweite Parameter ist eine Adresserweiterung wie »Büro 121« oder »Gebäude B«. Darauf folgen die Parameter für Straße (inkl. der Hausnummer), Bundesland, Postleitzahl und Land. Zwar ist die Angabe des Bundeslandes in Deutschland unüblich, aber es handelt sich hierbei um einen internationalen Standard, der dieses Feld sinnvoll macht.

Nachdem Sie die Adresse hinzugefügt haben, kann ein Client sie aber noch nicht zuordnen. Es fehlt also noch die Information, ob es sich z. B. um die Firmen- oder die Privatadresse handelt. Diese Zuordnung erfolgt mit der Member-Funktion addParam(), mit der Sie auch bei anderen Elementen zusätzliche Parameter angeben können. Bitte beachten Sie, dass addParam(), wenn es mit zwei Parametern aufgerufen wird, immer das zuletzt eingefügte Element um den Parameter ergänzt.

$vcard->addAddress("","","742 Evergreen Terrace", 
                     "Springfield","NT","49007","USA"); 
$vcard->addParam("TYPE","HOME"); 
$vcard->addParam("TYPE","PREF"); 
 
$vcard->addAddress("","Sektor 7G","1 Isotope Road", 
                     "Springfield","NT","49127","USA"); 
$vcard->addParam("TYPE","WORK");

Bei Adressen können Sie den Parameter TYPE nutzen, der in diesem Beispiel mit den Werten HOME, WORK und PREF genutzt wird. Mit den ersten beiden Werten können Sie die Privat- bzw. die Firmen-Adresse kenntlich machen. Eine der Adressen kann darüber hinaus noch mithilfe von PREF als bevorzugte Adresse markiert werden. Jeder dieser Werte darf nur einmal in einer Visitenkarte auftauchen. Weitere mögliche Werte für TYPE sind DOM (Abkürzung für Domestic) für die häusliche Lieferadresse, INTL für eine internationale Anschrift, POSTAL für eine Postadresse und PARCEL für eine Adresse, die für die Zustellung von Paketen genutzt werden soll.

Zum Definieren von Telefon-, Fax- und anderen Nummern ist die Methode addTelephone() vorgesehen. Sie ist für alle Arten von Rufnummern zuständig. Um welche Art von Rufnummer es sich handelt, muss wiederum über Parameter spezifiziert werden. Wenn Sie mithilfe von addParam() den TYPE HOME einfügen, handelt es sich um die häusliche Rufnummer. TYPE WORK verdeutlicht, dass es sich um den Firmenanschluss handelt, CELL markiert eine Handy-Nummer und FAX eine Fax-Nummer. Darüber hinaus sind noch die Werte PAGER (Funkrufempfänger), MODEM (Modem-Anschluss), VIDEO (Videokonferenzsystem), CAR (Autotelefon), ISDN (ISDN-Anschluss) und BBS (Mailbox) zulässig. Die bevorzugte Nummer können Sie, genau wie bei der Adresse, mit PREF kenntlich machen.

Als weitere Kommunikationsmöglichkeit können Sie noch eine oder mehrere E–Mail-Adressen angeben. Die Methode addEmail() bekommt die Adresse übergeben und fügt sie in die Visitenkarte ein. Bei mehreren E-Mail-Adressen ist es möglich, zwischen verschiedenen Dienst-Typen zu unterscheiden, was normalerweise aber nicht nötig ist, da die meisten E-Mail-Adressen im Internet beheimatet sind, was der Standardeinstellung entspricht. Allerdings kann es hilfreich sein, bei mehreren Adressen die bevorzugte mit addParam ("TYPE","PREF"); zu markieren. Zusätzlich können Sie mit der Methode setURL() auch noch eine URL pro vCard angeben.

Weiterhin kann es noch hilfreich sein, die Position in der Firma mithilfe von setTitle() abzulegen. Möchten Sie außerdem noch den Geburtstag ergänzen, steht die Methode setBirthday() zur Verfügung. Das Geburtsdatum ist im ISO-Format anzugeben (YYYY-MM-DD), wobei Sie optional noch eine Uhrzeit mit Zeitverschiebung gegenüber der UTC angeben können (YYYY-MM-DDTHH:MM:SS-HH:MM).

Der Standard für vCards sieht noch viele weitere Features vor. Viele davon sind nicht unbedingt sonderlich sinnvoll, andere funktionieren leider nur unzureichend. Besonders schade ist, dass Bilder zum Kontakt zwar theoretisch in die Karte integriert werden können, aber viele Clients damit nicht zurechtkommen. Des Weiteren scheint die Klasse in der aktuellen Version 1.1 hier auch noch einen Fehler aufzuweisen. Nichtsdestotrotz möchte ich hier noch kurz erwähnen, wie es theoretisch funktionieren sollte, vielleicht hilft es Ihnen mit zukünftigen Versionen der Klasse.

Möchten Sie in der Visitenkarte nur die Adresse eines Bildes angeben, ist das recht einfach. Sie fügen den URI einfach mit setPhoto() hinzu und ergänzen dann mit addParam("VALUE","uri") die Information, dass es sich einen URI handelt.

    $vcard->setPhoto("http://www.netviser.org/bild.jpg"); 
    $vcard->addParam("VALUE","uri");

Allerdings sieht die Spezifikation des vCard-Standards auch vor, dass ein Bild direkt in der vCard gespeichert werden kann. Hierzu muss das Bild Base64-kodiert werden. Dazu lesen Sie die Datei am einfachsten mit file_get_contents() ein und bringen die Daten dann mit base64_encode() in die korrekte Kodierung. Die Methode setPhoto() fügt das Bild dann in die Visitenkarte ein.

$pic=file_get_contents("small.jpg"); 
$b64=base64_encode($pic); 
$vcard->setPhoto($b64); 
$vcard->addParam("ENCODING","b"); //fuer Version 2.1: Base64 
$vcard->addParam("TYPE","JPEG");

Um dem Client mitzuteilen, dass ein Bild enthalten ist, müssen Sie noch die korrekte Kodierung mit addParam("ENCODING","b") angeben. Die Angabe der Kodierung mit einem b ist der Version 3.0 vorbehalten. In der Version 2.1 müssen Sie ein Base64 angeben. Zu guter Letzt benötigt der Empfänger der Karte noch die Information, in welchem Format das Bild vorliegt. An Stelle des TYPE JPEG können Sie auch den TYPE GIF angeben.

 <<   zurück
     
  Zum Katalog
Zum Katalog: PHP PEAR
PHP PEAR
Jetzt bestellen!
 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchtipps
Zum Katalog: PHP 5.6 und MySQL 5.7






 PHP 5.6 und
 MySQL 5.7


Zum Katalog: Einstieg in PHP 5.6 und MySQL 5.6






 Einstieg in PHP 5.6
 und MySQL 5.6


Zum Katalog: Responsive Webdesign






 Responsive Webdesign


Zum Katalog: Moderne Websites entwickeln






 Moderne Websites
 entwickeln


Zum Katalog: MySQL 5.6






 MySQL 5.6


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo








Copyright © Rheinwerk Verlag GmbH 2007
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Rheinwerk Computing]

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de