Jump to content

random image problem


radicalhazz

Recommended Posts

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

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

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

<?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

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

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.