Avatar billede foxwell Nybegynder
21. januar 2009 - 22:07 Der er 1 kommentar og
1 løsning

problemer med random billede fra mappe

Hej Experter,

jeg har et PHP script som vælger et tilfældigt billede ud af alle billederne i en given mappe. Jeg henter et tilfeldigt billede ved at kalde script-filen således: <img src="random/random.php" />.

Mit problem er at jeg skal kalde denne fil flere gange fra den samme side (så jeg ender med X antal tilfældige billeder på siden jeg kalder fra), men ender hele tiden med X gange det samme billede (dog et nyt billede hver gang jeg refresher).

Jeg kan ikke finde ud af om det er min browser der cacher random.php for hvert kald, eller om scriptet bare eksekveres så hurtigt (X antal gange) at der ikke er nogen forskel på hvilket billede den spytter ud X antal gange.

Min kode er som følger (random.php):
---------------------------
$folder = '.';

$extList = array();
$extList['gif'] = 'image/gif';
$extList['jpg'] = 'image/jpeg';
$extList['jpeg'] = 'image/jpeg';
$extList['png'] = 'image/png';

$img = null;

if (substr($folder,-1) != '/') {
$folder = $folder.'/';
}

if (isset($_GET['img'])) {
$imageInfo = pathinfo($_GET['img']);
if (
isset( $extList[ strtolower( $imageInfo['extension'] ) ] ) &&
file_exists( $folder.$imageInfo['basename'] )
) {
$img = $folder.$imageInfo['basename'];
}
} else {
$fileList = array();
$handle = opendir($folder);
while ( false !== ( $file = readdir($handle) ) ) {
$file_info = pathinfo($file);
if (
isset( $extList[ strtolower( $file_info['extension'] ) ] )
) {
$fileList[] = $file;
}
}
closedir($handle);

if (count($fileList) > 0) {
srand ((double) microtime( )*1000000);
$random_number = rand(0,count($fileList));
$img = $folder.$fileList[$random_number];
}
}

if ($img!=null) {
$imageInfo = pathinfo($img);
$contentType = 'Content-type: '.$extList[ $imageInfo['extension'] ];
header ($contentType);
readfile($img);
} else {
if ( function_exists('imagecreate') ) {
header ("Content-type: image/png");
$im = @imagecreate (100, 100)
or die ("Cannot initialize new GD image stream");
$background_color = imagecolorallocate ($im, 255, 255, 255);
$text_color = imagecolorallocate ($im, 0,0,0);
imagestring ($im, 2, 5, 5,  "IMAGE ERROR", $text_color);
imagepng ($im);
imagedestroy($im);
}
}

?>
---------------------------

Nogen forslag? =)

//foxwell

Ps.: Jeg har prøvet at tilføje følgende til toppen af random.php, stadig uden held:
---------------------------
Header("Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0");
Header("Expires: Thu, 19 Nov 1981 08:52:00 GMT");
Header("Pragma: no-cache");
Avatar billede lakridserne Nybegynder
21. januar 2009 - 22:12 #1
Jeg ville nok prøve at putte indholdet af random.php ind i en funktion, og så bare kapde funktionen x antal gange

/lakridserne
Avatar billede foxwell Nybegynder
21. januar 2009 - 22:34 #2
lakridserne > Du har nok ret, grimmer mig over at jeg ikke tænkte på det før ^^ Tak for forslaget! =)

Har dog nu løst opgaven på en lidt anden måde, som desuden sørger for at det samme billede ikke dukker op flere gange:

$folder = 'random';

$extList = array();
$extList['gif'] = 'image/gif';
$extList['jpg'] = 'image/jpeg';
$extList['jpeg'] = 'image/jpeg';
$extList['png'] = 'image/png';

$img = null;

$fileList = array();
$handle = opendir($folder);
while ( false !== ( $file = readdir($handle) ) ) {
    $file_info = pathinfo($file);
    if (isset( $extList[ strtolower( $file_info['extension'] ) ] )){
        $fileList[] = $file;
    }
}

shuffle($fileList);
closedir($handle);

...og så kalder jeg bare det antal billeder jeg skal bruge sådan:

<img src="/random/<? echo $fileList[0]; ?>" />
<img src="/random/<? echo $fileList[1]; ?>" />
<img src="/random/<? echo $fileList[2]; ?>" />
... etc.

En noget simplere løsning end den første jeg prøvede, især fordi det altid er det samme antal billeder jeg skal bruge.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester