Hallo,

Ik wil graag een banner rotation, waarbij de banners uit een map worden gehaald, en er een willekeurige banner komt.
Dit heb ik al:

<?php
$dir = 'images/banners/';

if($handle = opendir($dir)){
while($file = readdir($handle)){
if(eregi('.jpg|.jpeg|.gif|.bmp|.png', $file)){
echo '<A href="' . $maindir . $file . '" target ="_blank"><img src="' . $dir . $file . '" width="400" height="150" border="0" /></a>';
}
}
}

?>
Alleen nu worden ALLE bestanden in die map getoond.
Hoe kan ik zorgen dat php een willekeurig bestand kiest?

Alvast bedankt
Zet alle bestanden eerst in een array in plaats van ze direct te echoën. Vervolgens kun je met [php]shuffle[/php]() de inhoud van de array door elkaar schudden en als je daarna de eerste waarde uit die array pakt, heb je een random bestand...
Hoe kan ik ze in een array plaatsen, terwijl ik ze uitlees met open/readdir?

Sorry voor m'n noob phptaal...
Door de bestandsnaam aan een bestaande array toe te voegen?
<?php
$aBestanden[] = $file;
?>
ik snap er niets meer van... zou je het misschien toe kunnen voegen aan mijn code?
<?php
$dir = 'images/banners/';

if($handle = opendir($dir)){
while($file = readdir($handle)){
if(eregi('.jpg|.jpeg|.gif|.bmp|.png', $file)){
echo '<A href="' . $dir . $file . '" target ="_blank"><img src="' . $dir . $file . '" border="0" /></a>';
}
}
}

?>
Zo dus bijvoorbeeld:
<?php
$dir = 'images/banners/';
$aFiles = array();

if($handle = opendir($dir))
{
while($file = readdir($handle))
{
if(eregi('.jpg|.jpeg|.gif|.bmp|.png', $file))
{
$aFiles[] = $file;
}
}
}

shuffle($aFiles);

echo '<A href="' . $dir . $aFiles[0] . '" target ="_blank"><img src="' . $dir . $aFiles[0] . '" border="0" /></a>';
?>
Of zo:

<?php
$directory = new DirectoryIterator('images/banners/');

foreach($directory as $item)
{
if(!$item->isDot() && !$item->isDir())
{
$files[] = $item->getPathname();
}
}

$file = array_rand($files, 1);

echo '<A href="" target ="_blank"><img src="' . $files[$file] . '" width="400" height="150" border="0" /></a>';
?>

scheelt weer :)
@Mr Muppet

Je vergeet wel voor je foreach de $files array aan te roepen, (te declareren, dat gaat een warning geven)
Mocht je nog meer nodig hebben: dit onderstaande script pakt een willekeurige foto/afbeelding uit de map en toont die.

Nummertje bovenaan werkt als soort willekeurig-nummer.
Ik gebruik dit op de frontpage van www.zunflappie.nl om de 3 foto's weer te geven (niet zichtbaar in IE).
Geef ik bovenaan die nummers hetzelfde nummer krijg ik ook dezelfde afbeelding. Link werkt dan tenminste ook.

Let wel: het is al een oud script en wellicht werkt het op php6 niet probleemloos.


<?php

// welke map moet hij openen?
$folder = 'forum_foto';
$nummer_bestand = 1;    // welk nummer heeft dit bestand (bestanden in dezelfde map met hetzelfde nummer geven hetzelfde fototje)

// welke bestanden moet hij openen?
$extList = array();
	$extList['gif'] = 'image/gif';
	$extList['jpg'] = 'image/jpeg';
	$extList['jpeg'] = 'image/jpeg';
	$extList['png'] = 'image/png';







// hieronder niets veranderen
$img = null;

// controleren of er een map is opgegeven
if (substr($folder,-1) != '/') 
	{
	$folder = $folder.'/';
	}


// is er een specifieke afbeelding opgegeven?
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) 
		{
		$aantal = count($fileList);
		$imageNumber = rand(1, "$aantal");
		// $imageNumber = (time() + $nummer_bestand) % count($fileList);
		$img = $folder.$fileList[$imageNumber];
		}
	}

// uitvoer = laten zien van de foto
echo "<img width=\"250\" height=\"175\" src=\"$img\">"; 



?>

Reageren