Broken Image
YTH
- grafik
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!
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
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...
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
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);
}
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
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
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