XMP4PHP Erweiterung
Die XMP4PHP Erweiterung für PHP stellt eine Schnittstelle zum Lesen von XMP (Extensible Metadata Platform) Metadaten aus und Schreiben von Metadaten in (Binär-)Dateien zur Verfügung.
Die Erweiterung basiert auf der Bibliothek exempi , die wiederum auf dem XMP Toolkit von Adobe aufsetzt.
In der ersten Version unterstützt die Erweiterung lediglich das Lesen und Schreiben von Metadaten, nicht jedoch deren Verarbeitung. Hierzu können jedoch die DOM -Funktionen von PHP verwendet werden. In folgenden Version sollen auch die Funktionen des XMP Toolkits zur Verfügung gestellt werden, mit deren Hilfe die Metadaten bearbeitet werden können.
Eine aktuelle Version von XMP4PHP steht auf der zentralen Download-Seite zur Verfügung.
Dokumentation
Die von der Erweiterung zur Verfügung gestellten Funktionen werden im folgenden kurz beschrieben.
xmp_read( $filename, $openMask = 5, $serializeMask = 1, $encodingMask = 0 )
Die Funktion xmp_read erwartet als Argument den Namen einer Datei, aus der die Metadaten gelesen werden sollen. Sie liefert als Ergebnis die Metadaten in Form von RDF (XML) zurück. Im Fehlerfall wird ein Wert kleiner als eins zurückgegeben. Die Bedeutung der einzelnen Werte kann der folgenden Tabelle entnommen werden.
| Rückgabewert |
Beschreibung |
|---|---|
| false | Die Übergabe der Parameter war nicht korrekt. |
| -1 | Die exempi Bilbiothek konnte nicht korrekt initialisiert werden. |
| -2 | Die übergebene Datei konnte nicht zum lesen geöffnet werden. |
| -3 | In der Datei sind keine Metadaten vorhanden. |
| -4 | Es steht nicht genug Speicher für die Metadaten zur Verfügung. |
| -5 | Die Serialisierung der Metadaten durch die exempi Bibliothek ist fehlgeschlagen. |
| -6 | Der serialisierten Metadaten konnte nicht in einen String umgewandelt werden. |
Die weiteren Funktionsparameter sind optional und erwarten eine Bitmaske entsprechend den Tabellen am unteren Ende dieser Seite.
xmp_write( $filename, $xmlData, $openMask = 5, $serializeMask = 1, $encodingMask = 0 )
Die Funktion xmp_write erwartet als Argumente den Namen der Datei, in die die Metadaten geschrieben werden sollen und die Metadaten in Form von RDF (XML). Wichtig dabei ist, das die Metadaten keine Informationen zur XML-Version enthalten dürfen. Konnten die Metadaten erfolgreich geschrieben werden, liefert die Funktion true zurück. Im Fehlerfall wird ein Wert kleiner als eins zurückgegeben. Die Bedeutung der einzelnen Werte kann der folgenden Tabelle entnommen werden.
| Rückgabewert |
Beschreibung |
|---|---|
| false | Die Übergabe der Parameter war nicht korrekt. |
| -1 | Die exempi Bilbiothek konnte nicht korrekt initialisiert werden. |
| -2 | Die übergebenen XML-Daten konnten nicht interpretiert / geparst werden. |
| -3 | Die Datei konnte nicht zum Schreiben göffnet werden. |
| -4 | Die exempi Bibliothek unterstützt das Schreiben von Metadaten in diesen Dateityp nicht. |
xmp_can_write( $filename, $xmlData, $openMask = 5, $serializeMask = 1, $encodingMask = 0 )
Die Funktion xmp_can_write erwartet als Argumente den Namen der Datei, für die geprüft werden soll, ob die mit dem zweiten Argument übergebenen Metadaten, von der Bibliothek in die Datei geschrieben werden können. Wichtig dabei ist, das die Metadaten keine Informationen zur XML-Version enthalten dürfen. Können die Metadaten entsprechend der durch die Parameter drei bis fünf übergebenen Masken geschrieben werden, liefert die Funktion true zurück. Im Fehlerfall wird ein Wert kleiner als eins zurückgegeben. Die Bedeutung der einzelnen Werte kann der folgenden Tabelle entnommen werden.
| Rückgabewert |
Beschreibung |
|---|---|
| false | Die Übergabe der Parameter war nicht korrekt. |
| -1 | Die exempi Bilbiothek konnte nicht korrekt initialisiert werden. |
| -2 | Die übergebenen XML-Daten konnten nicht interpretiert / geparst werden. |
| -3 | Die Datei konnte nicht zum Schreiben göffnet werden. |
Mögliche Werte für $openMask
| Wert |
Beschreibung |
|---|---|
| 0 | Keine besonderen Optionen. |
| 1 | Zum Lesen öffnen. |
| 2 | Zum Lesen und Schreiben öffnen. |
| 4 | Zugriff nur auf die XMP-Inhalte der Datei. |
| 8 | Unbekannt. |
| 16 | Strikte Prüfung. |
| 32 | Intelligenten Handler verwenden. |
| 64 | XMP-Pakete scannen. |
| 128 | Anzahl gescannter XMP-Pakete limitieren. |
| 256 | Im Hintergrund öffnen. |
Mögliche Werte für $serializeMask
| Wert |
Beschreibung |
|---|---|
| 1 | Keinen Paket-Wrapper verwenden. |
| 2 | Paket ist nur lesbar. |
| 4 | Kompaktes Format verwenden. |
| 8 | Bereich für Vorschau verwenden. |
| 16 | Exakte Paketlänge. |
| 32 | Alias-Kommentare schreiben. |
| 64 | Keinerleit Formatierung verwenden. |
Mögliche Werte für $encodingMask
| Wert |
Beschreibung |
|---|---|
| 0 | UTF-8 |
| 1 | UTF-16 big endian |
| 2 | UTF-16 little endian |
| 4 | UTF-32 big endian |
| 8 | UTF-32 little endian |
Bekannte Probleme
Beim Testen der exempi Bibliothek und des XMP Toolkit von Adobe in Version 4.1.1 sind mir folgende Dinge aufgefallen.
- Das XMP Toolkit verwendet die Ausnahmebehandlung um (kritische) Fehler abzufangen. Bei einigen Funktionen spiegelt sich das jedoch nicht in dem Rückgabewert der Funktion wider. Das bedeutet z.B. das beim Schreiben von XMP Daten in eine Datei true zurückgegeben wird, obwohl die Daten aufgrund eines Fehlers gar nicht geschrieben werden konnten. Weder XMP4PHP noch exempi können darauf Einfluß nehmen.
- In Version 1.99.4 von exempi kann das o.g. Problem zu einem Absturz von PHP führen. Das Problem scheint in Version 1.99.5 von exempi behoben zu sein, weshalb empfohlen wird die aktuellere Version zu verwenden.