YTH: Broken Image

Hallo!
Es kommt unter Umständen vor, dass ein in einer Webseite eingebundenes Bild nicht gefunden werden kann und vom Browser dann ein garstiges "Nicht gefunden" - Bild angezeigt wird [Wie man unten sieht...].
Wie kann ich jetzt machen, dass falls ein Bild nicht gefunden wurde, ein anderes "Standard - Bild" angezeigt wird?
Dank im Voraus!

  1. Hallo!

    Wie kann ich jetzt machen, dass falls ein Bild nicht gefunden wurde, ein anderes "Standard - Bild" angezeigt wird?
    Dank im Voraus!

    Eine Möglichkeit wäre es, Dein Standardbild stets als Hintergrundbild zu laden. Doch das erhöht die Ladezeit. Außerdem gibts keine Gewähr, dass nicht auch das Hintergrundbild mal nicht gefunden wird. Und warum überhaupt das Ganze?

    Grüße
    Wolf

    1. Eine Möglichkeit wäre es, Dein Standardbild stets als Hintergrundbild zu laden. Doch das erhöht die Ladezeit. Außerdem gibts keine Gewähr, dass nicht auch das Hintergrundbild mal nicht gefunden wird. Und warum überhaupt das Ganze?

      Also - es geht darum: Ein User kann per php Script die URL eines Bildes eingeben, dass für andere sichtbar sein soll. Jetzt sind User gewöhnlich dumm und packen es nicht, eine valid URL einzugeben - falls also dieses Bild nicht angezeigt wird, wird ein standardisiertes Bild statt dessen angezeigt...

      1. Hallo YTH,

        Also - es geht darum: Ein User kann per php Script die URL eines Bildes eingeben, dass für andere sichtbar sein soll. Jetzt sind User gewöhnlich dumm und packen es nicht, eine valid URL einzugeben

        dann prüf mit php, ob die Datei existiert.

        Grüße aus Nürnberg
        Tobias

        --
        Selfcode: sh:( fo:) ch:? rl:( br:< n4:& ie:% mo:| va:) de:] zu:) fl:( ss:| ls:[ js:|
  2. Moin Moin !

    Mit einem Script für die 404-Meldung; vorausgesetzt, Du kannst den geforderten Bildtyp anhand der URL erkennen.

    Folgendes Script ist meine 404-Meldung auf meinem Intranet-Server (beide schon etwas angestaubt):

    ---8<---8<---8<---
    #!/usr/bin/perl -w
    use strict;
    use CGI qw(:all);
    use Socket;

    sub status
    {
     my $stat=shift;
     my $stat2=$stat;
     $stat2=~s/^\d+\s+//;
     return +(
      header(-status=>$stat),"\n",
      start_html($stat2),"\n",
      h1($stat2),"\n"
     );
    }

    sub sign
    {
     if (defined $ENV{'SERVER_SIGNATURE'}) {
      return +(
       hr(),"\n",
       $ENV{'SERVER_SIGNATURE'},"\n",
       end_html(),"\n"
      );
     } else {
      return +(end_html(),"\n");
     }
    }

    unless (defined $ENV{'REDIRECT_URL'}) {
     # we were not called by Apache's ErrorDocument directive
     print
      status('403 Forbidden'),
      p('This script is for internal purposes only.'),
      sign();
     exit(0);
    }

    my $url=$ENV{'REDIRECT_URL'};

    if ($url=~/.js$/i) {
     # Missing Javascript

    my $msg=qq[
    404 Not Found

    $url
    is missing.

    This is a server-generated replacement that only shows you this message.
    Expect trouble with your webpage ...
     ];
     $msg=~s/\n/\n/gs;
     $msg=~s/^\s+//gm;
     print
      header(
       -expires=>'-1d',
       -type=>'text/javascript',
      ),
      qq[
    /* 404 Not Found */
    /* The real javascript file "$url" is missing. */
    window.alert('$msg');
      ];
     exit(0);
    }

    if ($url=~/.css$/i) {
     # Missing Javascript

    print
      header(
       -expires=>'-1d',
       -type=>'text/css',
      ),
      "/* 404 Not Found */\n",
      "/* The real stylesheet file "$url" is missing. */\n";
     exit(0);
    }

    if (($url=~/.gif$/i) or ($url=~/.jpe?g?$/i) or ($url=~/.png$/i)) {
     # Missing Image
     print
      header(
       -expires=>'-1d',
       -type=>'image/gif',
      ),
      "\x47\x49\x46\x38\x39\x61\x01\x00\x01\x00\x80\x00\x00\x00\x00\x00" .
      "\xFF\xFF\xFF\x21\xF9\x04\x01\x00\x00\x00\x00\x2C\x00\x00\x00\x00" .
      "\x01\x00\x01\x00\x00\x02\x01\x44\x00\x3B";
      # Data is a 2-color 1x1 Pixel transparent GIF image
     exit(0);
    }

    standard broken link

    print
     status('404 Not Found'),
     p("The requested URL $url was not found on this server."),
     sign();

    exit(0);
    ---8<---8<---8<---

    Es geht sicher auch anders, vielleicht mit Rewrite-Rules. Mein Script funktioniert auf meinem Linux jedenfalls.

    Auf Windows sollte noch möglichst früh "binmode STDOUT;" eingefügt werden, weil sonst das Ersatz-Gif beschädigt werden könnte. Unter Linux ist das unnötig, schadet aber auch nicht.

    Alexander

    --
    Nein, ich beantworte keine Fragen per eMail. Dafür ist das Forum da.
    Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so!"
  3. Hallo!

    Wie kann ich jetzt machen, dass falls ein Bild nicht gefunden wurde, ein anderes "Standard - Bild" angezeigt wird?

    Für solche Zwecke gibts eigentlich das Attribut alt="irgendwas", dann wird in normgerechten Browsern kein broken Image, sondern Text angezeigt.
    Geht allerdings nicht im MSIE.

    Ansonsten kannst Du anstatt <img> <object> verwenden und mehrere Grafiken ineinander verschachteln. Wenn die Äußere nicht gezeigt werden kann, soll die innere verwendet werden.
    Welche Browser das wirklich so machen, muß Du mal probieren.

    tschüs, jürgen

    1. hmm...

      Ansonsten kannst Du anstatt <img> <object> verwenden und mehrere Grafiken ineinander verschachteln. Wenn die Äußere nicht gezeigt werden kann, soll die innere verwendet werden.

      Hab das interessehalber gerade mal selber getestet.

      <object data="bild.gif" width="300" height="150">
       <img src="ersatzbild.gif" width="300" height="150">
      </object>

      läuft einwandfrei in IE5 und opera7: Wenn bild.gif nicht existiert, wird ersatzbild.gif angezeigt.

      Warum spielt mozilla da nicht mit? Bug oder Feature?

      tschüs, jürgen