radicalhazz Posted July 16, 2008 Share Posted July 16, 2008 Hi everyone. I am using an image rotator to provide random background images for my website, and it works really well. It is one by Dan P. Benjamin, from http://alistapart.com/articles/randomizer/. The trouble is, the image changes every time you click on a link in the site which is a bit annoying. I don't mind it changing each time "home" is visited, but would like it to stay constant whilst users are browsing the site. That way each time they revisit the site there will be a new image, keeping it interesting, but it won't distract them during use. Especially as there appears to be a slight delay before the image appears. the site in question is www.brohg.com feel free to check it out. From my google research, i've ascertained that it may be possible to do something with a time function... ie the page loads with a random image, then if it tries to reload a random image on moving to another page within 5 mins or so, then it won't change the image. Is this possible?? Please be aware that i don't really know anything about php, so not too much jargon please!!! thanks! Hope you can help!! Cheers, Harry Link to comment https://forums.phpfreaks.com/topic/115049-random-image-problem/ Share on other sites More sharing options...
rhodesa Posted July 16, 2008 Share Posted July 16, 2008 Easiest way is to use php sessions. So, in random.php, modify you script like so: <?php session_start(); $expire_time = 5 * 60; //5 minutes if(!isset($_SESSION['randomimage']) || $_SESSION['randomimage']['time'] + $expire_time < time()){ //Assign a new image /** * Code to pick random image here */ $_SESSION['randomimage'] = array( 'image' => 'some_image_path.jpg', //Store the path to the image here 'time' => time(), ); } //Using value of $_SESSION['randomimage']['image'], send the contents of the image here ?> This will store the random image in the session, and keep returning the same pic. After 5 minutes it will also rotate the image. Link to comment https://forums.phpfreaks.com/topic/115049-random-image-problem/#findComment-591645 Share on other sites More sharing options...
radicalhazz Posted July 16, 2008 Author Share Posted July 16, 2008 wow... very quick response. Thanks!! I tried putting that either side of my randomiser code, but it didn't work!! I litterally know nothin about php! Could i send you the randomiser code, and you put that other bit in properly??? Sorry to be difficult... don't know what else to do! Many thanks Harry Link to comment https://forums.phpfreaks.com/topic/115049-random-image-problem/#findComment-591658 Share on other sites More sharing options...
rhodesa Posted July 16, 2008 Share Posted July 16, 2008 yeah...post the contents of random.php ...when you post it, click the # button in the toolbar first, so it puts CODE tags around it Link to comment https://forums.phpfreaks.com/topic/115049-random-image-problem/#findComment-591666 Share on other sites More sharing options...
radicalhazz Posted July 16, 2008 Author Share Posted July 16, 2008 <?php /* AUTOMATIC IMAGE ROTATOR Version 2.2 - December 4, 2003 Copyright (c) 2002-2003 Dan P. Benjamin, Automatic, Ltd. All Rights Reserved. http://www.hiveware.com/imagerotator.php http://www.automaticlabs.com/ DISCLAIMER Automatic, Ltd. makes no representations or warranties about the suitability of the software, either express or implied, including but not limited to the implied warranties of merchantability, fitness for a particular purpose, or non-infringement. Dan P. Benjamin and Automatic, Ltd. shall not be liable for any damages suffered by licensee as a result of using, modifying or distributing this software or its derivatives. ABOUT This PHP script will randomly select an image file from a folder of images on your webserver. You can then link to it as you would any standard image file and you'll see a random image each time you reload. When you want to add or remove images from the rotation-pool, just add or remove them from the image rotation folder. VERSION CHANGES Version 1.0 - Release version Version 1.5 - Tweaked a few boring bugs Version 2.0 - Complete rewrite from the ground-up - Made it clearer where to make modifications - Made it easier to specify/change the rotation-folder - Made it easier to specify/change supported image types - Wrote better instructions and info (you're them reading now) - Significant speed improvements - More error checking - Cleaner code (albeit more PHP-specific) - Better/faster random number generation and file-type parsing - Added a feature where the image to display can be specified - Added a cool feature where, if an error occurs (such as no images being found in the specified folder) *and* you're lucky enough to have the GD libraries compiled into PHP on your webserver, we generate a replacement "error image" on the fly. Version 2.1 - Updated a potential security flaw when value-matching filenames Version 2.2 - Updated a few more potential security issues - Optimized the code a bit. - Expanded the doc for adding new mime/image types. Thanks to faithful ALA reader Justin Greer for lots of good tips and solid code contribution! INSTRUCTIONS 1. Modify the $folder setting in the configuration section below. 2. Add image types if needed (most users can ignore that part). 3. Upload this file (rotate.php) to your webserver. I recommend uploading it to the same folder as your images. 4. Link to the file as you would any normal image file, like this: <img src="http://example.com/rotate.php"> 5. You can also specify the image to display like this: <img src="http://example.com/rotate.php?img=gorilla.jpg"> This would specify that an image named "gorilla.jpg" located in the image-rotation folder should be displayed. That's it, you're done. */ /* ------------------------- CONFIGURATION ----------------------- Set $folder to the full path to the location of your images. For example: $folder = '/user/me/example.com/images/'; If the rotate.php file will be in the same folder as your images then you should leave it set to $folder = '.'; */ $folder = '.'; /* Most users can safely ignore this part. If you're a programmer, keep reading, if not, you're done. Go get some coffee. If you'd like to enable additional image types other than gif, jpg, and png, add a duplicate line to the section below for the new image type. Add the new file-type, single-quoted, inside brackets. Add the mime-type to be sent to the browser, also single-quoted, after the equal sign. For example: PDF Files: $extList['pdf'] = 'application/pdf'; CSS Files: $extList['css'] = 'text/css'; You can even serve up random HTML files: $extList['html'] = 'text/html'; $extList['htm'] = 'text/html'; Just be sure your mime-type definition is correct! */ $extList = array(); $extList['gif'] = 'image/gif'; $extList['jpg'] = 'image/jpeg'; $extList['jpeg'] = 'image/jpeg'; $extList['png'] = 'image/png'; // You don't need to edit anything after this point. // --------------------- END CONFIGURATION ----------------------- $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) { $imageNumber = time() % count($fileList); $img = $folder.$fileList[$imageNumber]; } } 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); } } ?> Link to comment https://forums.phpfreaks.com/topic/115049-random-image-problem/#findComment-591674 Share on other sites More sharing options...
rhodesa Posted July 16, 2008 Share Posted July 16, 2008 try this out: <?php /* AUTOMATIC IMAGE ROTATOR Version 2.2 - December 4, 2003 Copyright (c) 2002-2003 Dan P. Benjamin, Automatic, Ltd. All Rights Reserved. http://www.hiveware.com/imagerotator.php http://www.automaticlabs.com/ DISCLAIMER Automatic, Ltd. makes no representations or warranties about the suitability of the software, either express or implied, including but not limited to the implied warranties of merchantability, fitness for a particular purpose, or non-infringement. Dan P. Benjamin and Automatic, Ltd. shall not be liable for any damages suffered by licensee as a result of using, modifying or distributing this software or its derivatives. ABOUT This PHP script will randomly select an image file from a folder of images on your webserver. You can then link to it as you would any standard image file and you'll see a random image each time you reload. When you want to add or remove images from the rotation-pool, just add or remove them from the image rotation folder. VERSION CHANGES Version 1.0 - Release version Version 1.5 - Tweaked a few boring bugs Version 2.0 - Complete rewrite from the ground-up - Made it clearer where to make modifications - Made it easier to specify/change the rotation-folder - Made it easier to specify/change supported image types - Wrote better instructions and info (you're them reading now) - Significant speed improvements - More error checking - Cleaner code (albeit more PHP-specific) - Better/faster random number generation and file-type parsing - Added a feature where the image to display can be specified - Added a cool feature where, if an error occurs (such as no images being found in the specified folder) *and* you're lucky enough to have the GD libraries compiled into PHP on your webserver, we generate a replacement "error image" on the fly. Version 2.1 - Updated a potential security flaw when value-matching filenames Version 2.2 - Updated a few more potential security issues - Optimized the code a bit. - Expanded the doc for adding new mime/image types. Thanks to faithful ALA reader Justin Greer for lots of good tips and solid code contribution! INSTRUCTIONS 1. Modify the $folder setting in the configuration section below. 2. Add image types if needed (most users can ignore that part). 3. Upload this file (rotate.php) to your webserver. I recommend uploading it to the same folder as your images. 4. Link to the file as you would any normal image file, like this: <img src="http://example.com/rotate.php"> 5. You can also specify the image to display like this: <img src="http://example.com/rotate.php?img=gorilla.jpg"> This would specify that an image named "gorilla.jpg" located in the image-rotation folder should be displayed. That's it, you're done. */ /* ------------------------- CONFIGURATION ----------------------- Set $folder to the full path to the location of your images. For example: $folder = '/user/me/example.com/images/'; If the rotate.php file will be in the same folder as your images then you should leave it set to $folder = '.'; */ $folder = '.'; /* Most users can safely ignore this part. If you're a programmer, keep reading, if not, you're done. Go get some coffee. If you'd like to enable additional image types other than gif, jpg, and png, add a duplicate line to the section below for the new image type. Add the new file-type, single-quoted, inside brackets. Add the mime-type to be sent to the browser, also single-quoted, after the equal sign. For example: PDF Files: $extList['pdf'] = 'application/pdf'; CSS Files: $extList['css'] = 'text/css'; You can even serve up random HTML files: $extList['html'] = 'text/html'; $extList['htm'] = 'text/html'; Just be sure your mime-type definition is correct! */ $extList = array(); $extList['gif'] = 'image/gif'; $extList['jpg'] = 'image/jpeg'; $extList['jpeg'] = 'image/jpeg'; $extList['png'] = 'image/png'; /* Time it will keep the same image set to 0 or null to keep the same image for the entire session */ $expire_time = 5 * 60; //5 minutes // You don't need to edit anything after this point. // --------------------- END CONFIGURATION ----------------------- session_start(); if(!isset($_SESSION['randomimage']) || ($expire_time && $_SESSION['randomimage']['time'] + $expire_time < time())){ //Assign a new image $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) { $imageNumber = time() % count($fileList); $img = $folder.$fileList[$imageNumber]; } } //Add to session $_SESSION['randomimage'] = array( 'image' => $img, 'time' => time(), ); } $img = $_SESSION['randomimage']['image']; 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); } } ?> Link to comment https://forums.phpfreaks.com/topic/115049-random-image-problem/#findComment-591685 Share on other sites More sharing options...
radicalhazz Posted July 16, 2008 Author Share Posted July 16, 2008 AAAAAARGH! this is so frustrating... sorry to keep bothering you. It still isn't working. It still does a new image everytime you click a link on the page. ANy ideas?? Link to comment https://forums.phpfreaks.com/topic/115049-random-image-problem/#findComment-591746 Share on other sites More sharing options...
rhodesa Posted July 16, 2008 Share Posted July 16, 2008 well...it works for me also, if i go to the link you provided before i get the same image every time Link to comment https://forums.phpfreaks.com/topic/115049-random-image-problem/#findComment-591770 Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.