Mikaaa: Html img Bilder aktualisieren

Moinsen...

Hier mein Problem: Ich habe eine html seite mit bildern. Diese Bilder werden in unregelmässigen abständen durch neue bilder (mit gleichem namen) ersetzt. Kann ich meine seite so gestalten, das z.b javascript oder ähnliches... in regelmäßigen abständen kontrolliert, ob sich das bild erneuert hat und wenn ja, es dann neu zu laden? Für tipps bzw. Hinweise wäre ich sehr dankbar...

Gruss mikaaa

  1. Moin!

    Ich habe eine html seite mit bildern. Diese Bilder werden in unregelmässigen abständen durch neue bilder (mit gleichem namen) ersetzt. Kann ich meine seite so gestalten, das z.b javascript oder ähnliches... in regelmäßigen abständen kontrolliert, ob sich das bild erneuert hat und wenn ja, es dann neu zu laden? Für tipps bzw. Hinweise wäre ich sehr dankbar...

    Im Prinzip: Ja.

    Es bieten sich zwei Vorgehensweisen an:

    1.) Du nutzt ggf. die Möglichkeit mit htaccess http-header zu senden und sorgst dafür, dass der Browser nicht einfach den cache benutzt, sondern neu validiert

    2.) Du sorgst dafür, dass serverseitig jedesmal wenn ein neues Bild kommt eine weitere Datei mit einer "Prüfsumme" oder besser dem Änderungsdatum angelegt wird. Das kann

    2.a) crc32 sein:

    2.a.1.) in einer Linux-Shell:

    crc32 datei.jpg > datei.crc;
    

    2.a.2.) in PHP:

    <?php
    $crc=crc32(file_get_contents('datei.jpg'));
    file_put_contents('datei.crc', $crc);
    ?>
    

    2.b) oder besser das Dateidatum:

    2.b.1.) in einer Linux-Shell:

    stat -c "%Z" datei.jpg > datei.time
    

    2.a.2.) in PHP:

    <?php
    clearstatcache(false, 'datei.jpg');
    $t=filectime('datei.jpg');
    file_put_contents('datei.time', $t);
    ?>
    

    Die Zeit wäre hier wohl vorzuziehen. Dazu muss nämlich nicht die Datei gelesen werden.

    Die Datei datei.crc oder besser datei.time kann man dann mit Javascript abholen (dabei wie im verlinkten Beispiel den Cache durch Übergabe eines "nutzlosen" Timestamps umgehen), den Inhalt mit dem des früheren Requests vergleichen und bei Änderungen das Bild (datei.jpg) selbst neu laden.

    Am einfachsten dürfte es aber sein, die Header zu senden und mit einem simplen Javascript das Bild regelmäßig abzuholen.

    Das verlinkte Skript zeigt wie man hierbei die Nutzung eines Cache komplett verhindert. Wenn das Bild in großen Abständen erneuert wird könnte das durchaus ungünstig sein, dann würde ich womöglich zu einer Kombination mit der letzten Änderung (c-Time) greifen.

    Jedenfalls wenn serverseitig die Möglichkeit eines Skriptens besteht.

    Jörg Reinholz

    1. Wow vielen dank für die schnelle antwort werd es gleich mal testen... gruss