Seite 1 von 1
Zufallsbild wird nicht angezeigt
Verfasst: 27.01.2009 19:06
von Coren
Hallo allerseits!
Ich habe einen Ordner mit Bildern, die ich zufallsgeneriert über das IMG-Tag angezeigt bekommen möchte.
Hierzu verwende ich diese PHP-Datei rid.php:
Code: Alles auswählen
<?php
#This script has been developped by Nenad Motika [nmotika@bezveze.com]
#Please feel free to use it and to contact me for any reason
//read folder
$folder=opendir(".");
while ($file = readdir($folder))
$names[count($names)] = $file;
closedir($folder);
//sort file names in array
sort($names);
//remove any non-images from array
$tempvar=0;
for ($i=0;$names[$i];$i++){
$ext=strtolower(substr($names[$i],-4));
if ($ext==".jpg"||$ext==".gif"||$ext=="jpeg"||$ext==".png"){$names1[$tempvar]=$names[$i];$tempvar++;}
}
//random
srand ((double) microtime() * 10000000);
$rand_keys = array_rand ($names1, 2);
//random image from array
$slika=$names1[$rand_keys[0]];
//image dimensions
$dimensions = GetImageSize($slika);
if (isset($HTTP_GET_VARS["pic"])){header ("Location: $slika");}
else {echo "<img src=\"$slika\" $dimensions[3]>";}
?>
Und rufe das ganze über rid.php?pic=random auf.
Nun wird das Zufallsbild zwar angezeigt, wenn ich die URL direkt aufrufe aber leider nicht, wenn ich diese in einem IMG-Tag verpacke.
Kann mir da evtl. jemand weiterhelfen?
Gruß, Coren
Re: Zufallsbild wird nicht angezeigt
Verfasst: 27.01.2009 19:13
von piero
funktioniert es wenn du das:
noch dazufügst?
mit dem wird dem browser noch mitgeteilt, dass er ein bild vor sich hat...
Code: Alles auswählen
<?php
#This script has been developped by Nenad Motika [nmotika@bezveze.com]
#Please feel free to use it and to contact me for any reason
//read folder
$folder=opendir(".");
while ($file = readdir($folder))
$names[count($names)] = $file;
closedir($folder);
//sort file names in array
sort($names);
//remove any non-images from array
$tempvar=0;
for ($i=0;$names[$i];$i++){
$ext=strtolower(substr($names[$i],-4));
if ($ext==".jpg"||$ext==".gif"||$ext=="jpeg"||$ext==".png"){$names1[$tempvar]=$names[$i];$tempvar++;}
}
//random
srand ((double) microtime() * 10000000);
$rand_keys = array_rand ($names1, 2);
//random image from array
$slika=$names1[$rand_keys[0]];
//image dimensions
$dimensions = GetImageSize($slika);
// send mime-type
header("Content-Type: {$dimensions['mime']}"); // <----
if (isset($HTTP_GET_VARS["pic"])){header ("Location: $slika");}
else {echo "<img src=\"$slika\" $dimensions[3]>";}
?>
Re: Zufallsbild wird nicht angezeigt
Verfasst: 27.01.2009 23:01
von Coren
Hallo piero!
Danke für deine schnelle Antwort.
Wenn ich die von dir genannte Änderung vornehme kann ich das Bild leider weder im IMG-Tag, noch als direkte URL sehen; man sieht nur ein Fehlerbild.
Gruß, Coren
Re: Zufallsbild wird nicht angezeigt
Verfasst: 27.01.2009 23:47
von piero
Beim Umprogrammieren des Scripts ist mir dann aufgefallen, dass dieses Script eigentlich gar kein Bild ausgibt... sondern html code
Die Browser zeigen das aus Kompatibilitätsgründen alle ohne Fehler an...
Wo hast du das überhaupt ausgegraben? Das ist noch für php4 programmiert worden^^
Hier jetzt das funktionierende Script
Code: Alles auswählen
<?php
// Read images from this folder
$folder = '.';
// Allowed types for images
$type = array(
'jpg',
'jpeg',
'gif',
'png',
);
// --------------
//read folder
$folder = opendir($folder);
while ($file = readdir($folder))
{
$names[] = $file;
}
closedir($folder);
//remove any non-images from array
for ($i = 0; count($names) > $i; $i++)
{
$ext = explode('.', $names[$i]);
$ext = strtolower($ext[count($ext) - 1]);
if (in_array($ext, $type))
{
$images[] = $names[$i];
}
}
//random image from array
$image = $images[array_rand($images, 1)];
// imagesize + mime type
$size = getimagesize($image);
// open the image to read and send it
$fp = fopen($image, "rb");
if ($size && $fp) {
header("Content-type: {$size['mime']}");
fpassthru($fp);
exit;
} else {
// Fehler, hier kannst du dann zB. ein "Fehlerbild" schicken.
}
?>
Re: Zufallsbild wird nicht angezeigt
Verfasst: 28.01.2009 00:10
von Coren
Hi piero!
Dein neuer Code funktioniert ja sowas von super!
Freu mich total, dass das nun funktioniert! =)
Den obrigen Code habe ich durch Google-Suche auf der genannten Website gefunden.
Vielen Dank für deine Hilfe =)
Gruß, Coren
edit: Eine Frage noch: Bei dem "Fehlerbild"; muss da dann eine ganze URL eingefügt werden oder nur der Bildname?
Re: Zufallsbild wird nicht angezeigt
Verfasst: 29.01.2009 00:44
von piero
Da ich eh schon am Code optimieren bin: Dein Error-Bildchen kannst du jetzt in der Variable $error_img angeben. Das Bild wird im Ordner $folder gesucht, kannst du aber auch ändern...
In der Variable $exclude kannst duauch Bilder eingeben, die du durch das Script nicht anzeigen möchtest...
Code: Alles auswählen
<?php
// Read images from this folder
$folder = '.';
// Allowed types for images
$type = array(
'jpg',
'jpeg',
'gif',
'png',
);
// Show this image on errors
$error_img = 'error.png';
// Exclude this images
$exclude = array(
$error_img,
);
// --------------
// read folder and remove any non-images from array
$folder = opendir($folder);
while ($file = readdir($folder))
{
$ext = explode('.', $file);
$ext = strtolower($ext[count($ext) - 1]);
if (in_array($ext, $type) AND !in_array($file, $exclude) AND !is_dir($file))
{
$images[] = $file;
}
}
closedir($folder);
// choose random image from array
$image = $images[array_rand($images, 1)];
// open the image to read and send it
if ($fp = fopen($image, 'rb'))
{
$mime = getimagesize($image);
header('Content-type: ' . $mime['mime']);
fpassthru($fp);
fclose($fp);
}
elseif($fp = fopen($error_img, 'rb'))
{
// Send this image on errors
$mime = getimagesize($error_img);
header('Content-type: ' . $mime['mime']);
fpassthru($fp);
fclose($fp);
}
else
{
// If can't open $error_img ...
echo 'Irgendeine Fehlermeldung...';
}
?>