/[drupal]/contributions/themes/marinelli/img/banners/rotate.php
ViewVC logotype

Diff of /contributions/themes/marinelli/img/banners/rotate.php

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph | View Patch Patch

revision 1.2, Fri Apr 4 07:37:13 2008 UTC revision 1.3, Tue Aug 25 07:25:11 2009 UTC
# Line 1  Line 1 
1  <?php  <?php
2    
3  /*  /**
4     * randomly select an image from the current directory and return it
5          AUTOMATIC IMAGE ROTATOR   *
6          Version 2.2 - December 4, 2003   * @todo - consider accepting a local path as $_GET['img'] for overrides
7          Copyright (c) 2002-2003 Dan P. Benjamin, Automatic, Ltd.   * to remain compatible with Marinelli's rotate.php
8          All Rights Reserved.   *
9     * (but why? why possible use case is there for linking to
10          http://www.hiveware.com/imagerotator.php   * rotate.php?img=file.gif instead of straight to file.gif?)
11     */
12          http://www.automaticlabs.com/  
13    $file_types = array(
14      'gif'  => 'image/gif',
15          DISCLAIMER    'jpg'  => 'image/jpeg',
16          Automatic, Ltd. makes no representations or warranties about    'jpeg' => 'image/jpeg',
17          the suitability of the software, either express or    'png'  => 'image/png'
18          implied, including but not limited to the implied  ) ;
19          warranties of merchantability, fitness for a particular  
20          purpose, or non-infringement. Dan P. Benjamin and Automatic, Ltd.  $regex = '/\.(' . implode('|',array_keys($file_types)) . ')$/i' ;
21          shall not be liable for any damages suffered by licensee  $files = array() ;
22          as a result of using, modifying or distributing this  
23          software or its derivatives.  $directory = opendir(".");
24    while ( FALSE !== ($file = readdir( $directory )) ) {
25      if ( preg_match( $regex, $file ) ) {
26          ABOUT      $files[] = $file ;
27          This PHP script will randomly select an image file from a    }
28          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.  
   
29    
30  // --------------------- END CONFIGURATION -----------------------  if ( !empty( $files ) ) {
31    
32  $img = null;    $which   = rand(0,sizeof($files)-1) ;
33    
34  if (substr($folder,-1) != '/') {    if ( $file = file_get_contents( $files[$which] ) ) {
         $folder = $folder.'/';  
 }  
35    
36  if (isset($_GET['img'])) {      $parts   = explode('.',$files[$which]) ;
37          $imageInfo = pathinfo($_GET['img']);      $ext     = strtolower($parts[sizeof($parts)-1]) ;
38          if (  
39              isset( $extList[ strtolower( $imageInfo['extension'] ) ] ) &&      header( "Content-type: " . $file_types[$ext] ) ;
40          file_exists( $folder.$imageInfo['basename'] )      header( "Expires: Wed, 29 Jan 1975 04:15:00 GMT" );
41      ) {      header( "Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT" );
42                  $img = $folder.$imageInfo['basename'];      header( "Cache-Control: no-cache, must-revalidate" );
43          }      header( "Pragma: no-cache" );
44  } else {  
45          $fileList = array();      print $file ;
46          $handle = opendir($folder);  
47          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);  
   
  /* fixes cahce issue, thanks to dchapiesky */  
         header( "Expires: Mon, 20 Dec 1998 01:00:00 GMT" );  
         header( "Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT" );  
         header( "Cache-Control: no-cache, must-revalidate" );  
         header( "Pragma: no-cache" );  
   
         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);  
         }  
 }  
48    
 ?>  
49    }

Legend:
Removed from v.1.2  
changed lines
  Added in v.1.3

  ViewVC Help
Powered by ViewVC 1.1.2