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