Zufallsbild wird nicht angezeigt

Fragen zur Bedienung von phpBB 3.0.x, Probleme bei der Benutzung und alle weiteren Fragen inkl. Update auf die neuste phpBB 3.0.14 Version
Forumsregeln
phpBB 3.0 hat das Ende seiner Lebenszeit überschritten
phpBB 3.0 wird nicht mehr aktiv unterstützt. Insbesondere werden - auch bei Sicherheitslücken - keine Patches mehr bereitgestellt. Der Einsatz von phpBB 3.0 erfolgt daher auf eigene Gefahr. Wir empfehlen einen Umstieg auf die neuste phpBB-Version, welches aktiv weiterentwickelt wird und für welches regelmäßig Updates zur Verfügung gestellt werden.
Antworten
Coren
Mitglied
Beiträge: 61
Registriert: 07.09.2007 08:04

Zufallsbild wird nicht angezeigt

Beitrag 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
Zuletzt geändert von Coren am 27.01.2009 23:02, insgesamt 1-mal geändert.
piero
Mitglied
Beiträge: 476
Registriert: 10.11.2008 17:15
Wohnort: Schweiz

Re: Zufallsbild wird nicht angezeigt

Beitrag von piero »

funktioniert es wenn du das:

Code: Alles auswählen

header("Content-Type: {$dimensions['mime']}");
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]>";}
    ?>
Coren
Mitglied
Beiträge: 61
Registriert: 07.09.2007 08:04

Re: Zufallsbild wird nicht angezeigt

Beitrag 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
piero
Mitglied
Beiträge: 476
Registriert: 10.11.2008 17:15
Wohnort: Schweiz

Re: Zufallsbild wird nicht angezeigt

Beitrag von piero »

Beim Umprogrammieren des Scripts ist mir dann aufgefallen, dass dieses Script eigentlich gar kein Bild ausgibt... sondern html code :lol:

Code: Alles auswählen

<img src="zufallsbild.png" width="yx" height="xy">
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.
    }
?>
Coren
Mitglied
Beiträge: 61
Registriert: 07.09.2007 08:04

Re: Zufallsbild wird nicht angezeigt

Beitrag 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?
piero
Mitglied
Beiträge: 476
Registriert: 10.11.2008 17:15
Wohnort: Schweiz

Re: Zufallsbild wird nicht angezeigt

Beitrag 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...';
    }
?>
Antworten

Zurück zu „[3.0.x] Administration, Benutzung und Betrieb“