Date created: Sunday, March 13, 2011 9:40:50 PM. Last modified: Friday, September 15, 2017 10:38:40 AM

Image Rotor

After seeing a random image/banner rotator written in PHP whilst looking at a Drupal site, I decided to write my own. This simply needs to be point ad a directory that contains the images that require rotation (upon page refresh). Its similar to the Drupal rotator I saw except the Drupal rotator printed out a random image as a raw picture rathen than in HTML.

Also, the main reason I wrote this alternate is becuase I needed a rotator that supported image maps. By placing a text document in the images directory with the same name as an image, it will be loaded and used as an image map;

 * Banner/image rotator with link maps, 
 * James Bensley, 02-2011

// Is rotating on (1) or shall we show the default banner (0)
$rotating = 1;

// Full path to the folder where the images are [with trailing slash]
$imageFolder = '/home/r00tb00t/www/';

// HTTP path to be returned in to the page [with trailing slash]
$httpPath = '/img/';

// Default image used when banner rotation is turned off (inside the imageFolder path)
$defaultImage = 'selfphoto.jpg';

// Array of allowed file extensions and mime type mappings [lower case only]
$fileTypes = array();
$fileTypes[0] = 'gif';
$fileTypes[1] = 'jpeg';
$fileTypes[2] = 'jpg';
$fileTypes[3] = 'png';

//$imageInfo = null;

if(!is_dir($imageFolder)) // Make sure a valid image folder is supplied
 echo $imageFolder.' is not a directory dummy!';

if ($rotating==0) // If we aren't rotating show our default banner
	$imageInfo = pathinfo($imageFolder.$defaultImage);
	if (file_exists($imageFolder.$imageInfo['basename'])) // Make sure the default file exists
		displayImg(pathinfo($imageFolder.$defaultImage), $imageFolder, $httpPath); // Pass the image on to be displayed
		echo 'Default image doesn\'t exist you buffoon!'.$httpPath.$defaultImage;
}else // Else, we are rotating so get a list of images in the banners folder
	$fileList = array();
	$handle = opendir($imageFolder);
	while (false !== ($file = readdir($handle)))
		for($i=0;$i<count($fileTypes);$i++) { // Check this image is a permited file type
			$imageInfo = pathinfo($file);
			if ($fileTypes[$i] == strtolower($imageInfo['extension'])) {
				$fileList[] = $file; // build up a list

	if (count($fileList) > 0) { // Once we have built up a list, that actually has stuff in it!..
		$imageNumber = rand(0, (count($fileList)-1)); // Randomly pick one and parse it on to the display function
		displayImg(pathinfo($fileList[$imageNumber]), $imageFolder, $httpPath);
		//Admittedly the random part above is a bit weak but I don't care, I'm not counting the bloody occurrences!
		echo 'There are no images in the image folder dummy!';

// This function will display the image parsed but also check to see if a text file exists 
// of the same name, which can contain an image map, if so it will be used

function displayImg($img, $baseFolder, $baseURL)

	$mapFile = $baseFolder.$img['filename'].'.txt';
	if(file_exists($mapFile)) // Check for a link map
		echo '<img src="'.$baseURL.$img['basename'].'" usemap="#bannermap">';
		echo '<img src="'.$baseURL.$img['basename'].'">';

Example image map:
<map name="bannermap">
<area shape="rect" coords="38,18,147,112" href="/" alt="Home" />
<area shape="rect" coords="206,39,270,99" href="anotherpage" alt="Another Page" />
<area shape="rect" coords="270,62,375,83" href="andathird.html" alt="The Third Page" />