Ole wrote:
> men jeg har et billede, top.jpg, jeg gerne vil gøre det samme med, men det
> kan jeg ikke få til at fungere.
>
> Har en af jer en lige så simpel løsning når det gælder billeder.
Man kan ikke inkludere binære data på den måde i sit (x)HTML output og
det giver derfor ikke rigtig mening at udlæse et billede direkte fra
filen ud i dit (x)HTML - hvad enten du benytter PHP eller andet lignende
scriptsprog.
Hvis du vil inkludere et random antal billeder er der umiddelbart to
"simple" løsninger:
1) du har en liste over billed filerne liggende i et array i den fil
hvor du skal inkludere dit billede. Du udtrækker et random tal der
svarer til et random nummer mellem 0 og max antallet af indgange i dit
billed-array.
Herefter udlæser du det valgt navn til din kode:
$arrayPictures = (
'billede0.jpg',
'billede1.jpg',
'billede2.jpg'
);
mt_srand((double)microtime()*1000000); // seed for PHP < 4.2
$rand = mt_rand(0, count($arrayPictures));
echo "<img src=\"".$arrayPictures[$rand]."\" />";
2) kan det gøres mere avanceret - således at du enten udtrækker listen
fra en database eller fx direkte fra filsystemet og direkte genererer
din billedfil ud fra de læste data. Dette gøres i en seperat fil som du
ikke inkluderer via include() men inkluderer i din kode ved at benytte:
<img src="mit_php_billed_script.php" />
i stedet.
Det vigtige er så at mit_php_billed_script.php sætter de rigtige headers
inden du udlæser de binære data.
Et simpelt eksempel:
<?php
// Make this the relative path to the images, like "../img"
// or "random/images/".
// If the images are in the same directory, leave it blank.
$folder = 'random/images/';
// Space seperated list of extensions, you probably won't
// have to change this.
$exts = 'gif';
$files = array();
if ('' == $folder) $folder = './';
$handle = opendir($folder);
$exts = explode(' ', $exts);
while (false !== ($file = readdir($handle))) {
foreach($exts as $ext) { // for each extension check the extension
if (preg_match('/\.'.$ext.'$/i', $file, $test)) { // faster
than ereg, case insensitive
$files[] = $file; // it's good
}
}
}
closedir($handle); // We're not using it anymore
mt_srand((double)microtime()*1000000); // seed for PHP < 4.2
$rand = mt_rand(0, count($files);
//// Internal functions:
function load_jpeg($imgname) {
$im = @imagecreatefromgif($imgname); /* Attempt to open */
if (!$im) { /* See if it failed */
$im = imagecreate(135, 135); /* Create
a blank image */
$bgc = imagecolorallocate($im, 255,
255, 255);
$tc = imagecolorallocate($im, 0, 0, 0);
imagefilledrectangle($im, 0, 0, 135,
135, $bgc);
/* Output an errmsg */
imagestring($im, 1, 5, 5, "Error
loading $imgname", $tc);
}
return $im;
}
//// Output the picture
$image = load_jpeg( $folder.$files[$rand] );
header("Content-type: image/gif");
imagegif($image);
?>
Ovenstående kode er meget simpel kode der er genereret ud fra et par
læsninger i PHP online manualen og leverer fx et fuldt fungerende random
script til læsning af gif filer fra et dir.
At udvide ovenstående til enten at læse fra en database eller at
understøtte andre filer end gif er dog ikke så svært.
--
Med venlig hilsen
Geert Lund,
www.GLD.dk