Kann man mit PHP Metadaten in Datei schreiben?
Hallo zusammen
Ich habe sowas ähnliches wie Netflix programmiert, nur halt für meine eigenen Videos auf meinem eigenen lokalen Webserver.
Nun will ich, dass gespeichert wird, an welcher Position in einem Video ich grade stehe. Damit ich da weiterschauen kann, wenn ich mitten drin mal aufhöre.
Da ich die Verzeichnisse aber nicht alleine nutze kann es durchaus sein, dass mal Verzeichnisse oder Dateien verschoben und/oder Dateinamen geändert werden. Das heißt, ich muss den aktuellen Stand in der Datei selbst speichern.
Würde ich ihn in einer Datei speichern, könnte die Datei nach dem Verschieben oder Umbenennen nicht mehr identifiziert werden.
Darum ist meine Frage: Gibt es eine Möglichkeit, mit PHP sowas wie Metadaten zu schreiben - ähnlich wie die Exif-Infos bei Bildern?
Nachdem ich Google bemüht und in der PHP-Referenz die Dateifunktionen durchsucht habe sehe ich noch keine Möglichkeit.
Aber bei MacOS kann man ja beispielsweise "Kommentare" in eine Datei schreiben mittels Informationen (evtl. bei Windows ja auch). Aber dieses Feld kann ich mit PHP nicht ausgeben lassen.
Übrigens: Falls das mit der Kommandozeile irgendwie ginge, wär das auch cool. Man kann ja solche Befehle über PHP ausführen lassen.
Danke!
5 Antworten
Wenn du schon weißt, dass an den Dateien manuell rum gespielt / diese verschoben werden, lass das mit den Dateien besser, und setze auf eine vernünftige Lösung. Entweder eine Datenbank, wenn es denn permanent gespeichert werden muss, alternativ Cookies, wenn das nur kurzfristig gespeichert werden muss.
Falls du bei Dateien bleiben willst... Die PHP-Referenz hat zum Thema "In Dateien schreiben" eine ganze Seite: https://www.php.net/manual/de/function.file-put-contents.php
Eine Funktion wie "write_last_video_timestamp_into_proprietary_metafile()" gibt es aus gutem Grund nicht. Es gibt dafür einfach keine "genormte" Schnittstelle. Nimm einfach file_put_contents() und ein standardisiertes Dateiformat wie JSON oder XML. Beides unterstützt PHP ausgereift.
Du kannst mit PHP beliebige Dinge in Datei schreiben, also auch Metadaten in deine Videodateien. Problem dürfte aber sein, dass es dafür keine "bequeme", allgemeingültige Schnittstelle gibt. Du müsstest also abhängig vom Dateiformat jeweils eine Sonderlocke programmieren. Wenn deine Videos alle das selbe Format haben mag das gehen, sonst macht das aber eher keinen Spaß mehr...
Außerdem ist unschön, dass du in den Dateien selbst "rumpfuschen" würdest. Wenn was schiefgeht ist die Datei ggf. korrupt, d.h. Schrott. Würde ich mir gut überlegen...
Unter Linux würde ich versuchen erweiterte Dateiattribute (xattr) zu verwenden. PHP kann die lesen und schreiben. Beim Kopieren/Verschieben sollten die (korrekte Flags vorausgesetzt) ganz normal mitkommen. Also Metadaten auf Ebene des Dateisystems!
Du könntest ein Cookie setzen, z. B. setcookie(filmname, position);
Das Problem ist ja eher, daß das Dateiformat die Möglichkeit für das einfügen von Metadaten vorsehen muß.
Andererseits hat jede Datei Metadaten (Erstellungsdatum, Name usw. usf.). Insofern wären Extended Attributes (da standardisiert und unabhängig vom Dateiformat) ein generisches Weg das umzusetzen, wenn man es nicht in einer getrennten Datenbank (bzw. KV-Store) mitführen möchte, wie es viele Systeme sonst tun.
Und ja, man könnte es natürlich auch im Store des Browsrs ablegen, dann könnte jeder Client seine eigenen Positionen abspeichern.
Letztlich also nur eine Frage dessen, was genau Du umsetzen möchtest.
Speichere die Informationen lieber Zentral in einer DB. Die Datei kannst du ja z.B. über einen Hash Wert wieder erkennen wenn diese Verschoben wurde oder einen neuen Namen hat..
Ja das war mein Plan, der eigentlich richtig gut wäre. Aber viele Dateien sind 0,1 bis 2GB groß und das dauert dann bis zu einer Minute, bis der Hash erstellt wurde.