Maria: Download nur wenn nötig

Moin,

mein Script lädt derzeit per Cronjob alle 24h eine vorgegebene Datei von einem externen Server herunter, egal ob diese verändert wurde oder nicht.
Nun kommt die Frage auf, ob es nicht auch möglich ist ohne die Datei komplett herunterzuladen, festzustellen, ob diese geändert wurde oder noch gleich ist. Da es sich um 200 MB handelt, die heruntergeladen und importiert werden, würde es sich lohnen, wenn man einen nahezu eindeutigen Code wie MD5 oder zu allermindest Änderungsdatum/Größe der Datei abfragen könnte ohne den Download durchzuführen.
Auf dem externen Server kann nichts manipuliert werden. Also ich kann dort kein Script platzieren, was mir lokal die Infos abfragen kann und bereitstellt.
Gibt es einen PHP-Befehl dafür?

Danke und gute Nacht

  1. Moin,

    mein Script lädt derzeit per Cronjob alle 24h eine vorgegebene Datei von einem externen Server herunter, egal ob diese verändert wurde oder nicht.
    Nun kommt die Frage auf, ob es nicht auch möglich ist ohne die Datei komplett herunterzuladen, festzustellen, ob diese geändert wurde oder noch gleich ist. Da es sich um 200 MB handelt, die heruntergeladen und importiert werden, würde es sich lohnen, wenn man einen nahezu eindeutigen Code wie MD5 oder zu allermindest Änderungsdatum/Größe der Datei abfragen könnte ohne den Download durchzuführen.
    Auf dem externen Server kann nichts manipuliert werden. Also ich kann dort kein Script platzieren, was mir lokal die Infos abfragen kann und bereitstellt.
    Gibt es einen PHP-Befehl dafür?

    Danke und gute Nacht

    Hallo,

    wenn der Server von dem runterlädst ETag unterstützt (tut eigentlich fast jeder), kannst du das damit machen. Das ist ein Identifikationscode des Servers, der sich immer ändert, wenn die Datei sich ändert (z.B. ein MD5 hash oder auch nur eine fortlaufende Nummer). Du speicherst einfach den ETag vom letzten Mal und fügst bei der nächsten Anfrage einfach ein "If-None-Match: $alter_etag" ein und der Server antwortet entweder mit 200 und der Datei (es gab also Änderungen) oder 304 Not modified. An sich sehr simpel. Du kannst auch mit der Zeit arbeiten (If-Modified-Since), das ist aber nicht so einfach und nicht immer sicher, wegen den ganzen Umrechnungen. Problematisch ist es, wenn die Datei dynamisch erzeugt wird, dann wird die Datei vermutlich immer mit dem aktuellen Datum versehen und hat keinen ETag.
    Deine Anfrage muss auf den Fall HTTP 1.1 sein, nicht 1.0. Du kannst ja mal die Datei in Firefox aufrufen und mit LiveHTTPHeaders (eine FF extension) schauen wie die Anfrage von FF und die Antwort des Servers aussieht.

    Siehe auch hier: http://de.wikipedia.org/wiki/HTTP_ETag

    Viele Grüße,
    Stefan