Script for rotating 4 different photos?

Discussion in 'PHP' started by miracle, Sep 1, 2006.

  1. #1
    Hi, is there a script which i can show 4 different, random photos from a file? Currently im using one photo rotating script but it will show same photos.
     
    miracle, Sep 1, 2006 IP
  2. Chaos King

    Chaos King Peon

    Messages:
    88
    Likes Received:
    3
    Best Answers:
    0
    Trophy Points:
    0
    #2
    Can you be more specific and show examples if possible?
     
    Chaos King, Sep 1, 2006 IP
  3. miracle

    miracle Peon

    Messages:
    75
    Likes Received:
    0
    Best Answers:
    0
    Trophy Points:
    0
    #3
    miracle, Sep 1, 2006 IP
  4. harsh789

    harsh789 Member

    Messages:
    29
    Likes Received:
    1
    Best Answers:
    0
    Trophy Points:
    38
    #4
    Here is the simple script which show photo based on the second on which page loading.

    $photoarray = array("photo1","photo2","photo3","photo4");
    $selected = date('s') % count($photoarray);
    echo '<img src="'.$photoarray[$selected].'">';
    Code (markup):
     
    harsh789, Sep 2, 2006 IP
  5. wmburg

    wmburg Active Member

    Messages:
    300
    Likes Received:
    15
    Best Answers:
    0
    Trophy Points:
    58
    #5
    That isn't going to work based on the way that he is getting the images. He is using 4 seperate scripts that are all generating the same random number (like the above code will do). You also have to manually add each image to that array. That's a pain in the ass if you have a directory full of images. You can probably keep using the same script, but you'll need to make a change. Can we see the code?
     
    wmburg, Sep 2, 2006 IP
  6. miracle

    miracle Peon

    Messages:
    75
    Likes Received:
    0
    Best Answers:
    0
    Trophy Points:
    0
    #6
    Here's the code i used. Yes ive 4 same script in the images directory.

    <?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);
    	}
    }
    
    ?>
    
    PHP:
     
    miracle, Sep 2, 2006 IP
  7. smatts9

    smatts9 Active Member

    Messages:
    1,089
    Likes Received:
    71
    Best Answers:
    0
    Trophy Points:
    88
    #7
    For this to work you need all them hamster pictures in 1 folder and it will work nicely.

    I see all your pictures are outputed to 175x150 so I added that for you, you can and try to get GD working again.

    ps: change the $read= 'IMAGEFOLDER/'; to your picture folder :)
    If you have pictures that end in anything but jpg, gif, or png then you will wither need to change them or add a new line including the ending file extension.

    
    <?php
    $read = 'IMAGEFOLDER/';
    $myDirectory = opendir($read);
    while($entryName = readdir($myDirectory))
    {
    if (strtolower(substr($entryName, -3)) == "jpg")
    $dirArray[]=$entryName;
    if (strtolower(substr($entryName, -3)) == "gif")
    $dirArray[]=$entryName;
    if (strtolower(substr($entryName, -3)) == "png")
    $dirArray[]=$entryName;
    }  
    closedir($myDirectory);
    shuffle($dirArray);
    $img1=$read.$dirArray[0];
    $img2=$read.$dirArray[1];
    $img3=$read.$dirArray[2];
    $img4=$read.$dirArray[3];
    echo "<img src='$img1' width='175' height='150' />";
    echo "<img src='$img2' width='175' height='150' />";
    echo "<img src='$img3' width='175' height='150' />";
    echo "<img src='$img4' width='175' height='150' />";
    ?>
    
    Code (markup):
     
    smatts9, Sep 2, 2006 IP
  8. miracle

    miracle Peon

    Messages:
    75
    Likes Received:
    0
    Best Answers:
    0
    Trophy Points:
    0
    #8
    Thanks it works! :)
     
    miracle, Sep 3, 2006 IP
  9. miracle

    miracle Peon

    Messages:
    75
    Likes Received:
    0
    Best Answers:
    0
    Trophy Points:
    0
    #9
    Hi, i just realise that it only works in the index page, other inside pages dont work. Please help again :) Thanks
     
    miracle, Sep 3, 2006 IP
  10. smatts9

    smatts9 Active Member

    Messages:
    1,089
    Likes Received:
    71
    Best Answers:
    0
    Trophy Points:
    88
    #10
    Are these 'inside' pages within other folders? If so, then the location "IMAGEFOLDER/" will no longer work. because it will be trying to get to the folder/imagefolder, instead of the root/imagefolder, so try putting chdir('./../'); right on the top row after the <? .
     
    smatts9, Sep 3, 2006 IP
  11. wmburg

    wmburg Active Member

    Messages:
    300
    Likes Received:
    15
    Best Answers:
    0
    Trophy Points:
    58
    #11
    
    // get document root
    (substr($_SERVER["DOCUMENT_ROOT"],-1,1) == "/" ? $root = substr($_SERVER["DOCUMENT_ROOT"],0,-1) : $root = $_SERVER["DOCUMENT_ROOT"]);
    
    // image directory path
    $read = $root . "/images";
    
    PHP:
     
    wmburg, Sep 3, 2006 IP
  12. miracle

    miracle Peon

    Messages:
    75
    Likes Received:
    0
    Best Answers:
    0
    Trophy Points:
    0
    #12
    Not working, it says no such file in the directory.
     
    miracle, Sep 3, 2006 IP
  13. miracle

    miracle Peon

    Messages:
    75
    Likes Received:
    0
    Best Answers:
    0
    Trophy Points:
    0
    #13
    Thanks almost there but it catches my url
     
    miracle, Sep 3, 2006 IP
  14. wmburg

    wmburg Active Member

    Messages:
    300
    Likes Received:
    15
    Best Answers:
    0
    Trophy Points:
    58
    #14
    My bad, I didn't look too closely at smatts9's code and I thought it worked differently. Tired. :)

    Change what I gave you

    to

    // get document root
    (substr($_SERVER["DOCUMENT_ROOT"],-1,1) == "/" ? $root = substr($_SERVER["DOCUMENT_ROOT"],0,-1) : $root = $_SERVER["DOCUMENT_ROOT"]);
    
    // image dir
    $img_dir = "/images/";
    
    // image dir path
    $read = $root . $img_dir;
    PHP:
    and change

    $img1=$read.$dirArray[0];
    $img2=$read.$dirArray[1];
    $img3=$read.$dirArray[2];
    $img4=$read.$dirArray[3];
    PHP:
    to

    $img1=$img_dir.$dirArray[0];
    $img2=$img_dir.$dirArray[1];
    $img3=$img_dir.$dirArray[2];
    $img4=$img_dir.$dirArray[3];
    PHP:
     
    wmburg, Sep 3, 2006 IP
  15. miracle

    miracle Peon

    Messages:
    75
    Likes Received:
    0
    Best Answers:
    0
    Trophy Points:
    0
    #15
    Applause! Thanks its working now :)

    Special thanks to smatts9 and WMBurg for your replies.
     
    miracle, Sep 3, 2006 IP
  16. Lukas

    Lukas Well-Known Member

    Messages:
    1,299
    Likes Received:
    23
    Best Answers:
    0
    Trophy Points:
    130
    #16
    I'd like to use this script too but became confused since what was done/ changed here is partial and uses some of the original script.?

    I only want to rotate a few gif's on my home page.

    For a newbie, what is the script for that and what areas within the script neeed to be changed ?

    such as "images" folder... if I want 1 specific gif to always appear no matter what is rotating in or out..

    Please post the entire script.

    Thanks for your help
     
    Lukas, Nov 17, 2006 IP