So I have this script that will rotate images located in a directory, which works great. However, it requires a refresh of the page in order to rotate the image. Is there a way I can modify this to have it rotate the image when the image itself is clicked? Thanks in advance
HTML:
<img src="rotate.php" alt="random image" />
PHP:
<?php
$folder = 'images/';
$exts = 'jpg jpeg png gif';
$files = array(); $i = -1;
if ('' == $folder) $folder = './';
$handle = opendir($folder);
$exts = explode(' ', $exts);
while (false !== ($file = readdir($handle))) {
foreach($exts as $ext) {
if (preg_match('/.'.$ext.'$/i', $file, $test)) {
$files[] = $file;
++$i;
}
}
}
closedir($handle);
mt_srand((double)microtime()*1000000);
$rand = mt_rand(0, $i);
header('Location: '.$folder.$files[$rand]);
?>
Advertisement
Answer
Update: this is very basic but test it out and see if it works;
<script>
function changeImage(o){
o.src = 'http://www.domain.com/testtest.php?' + (new Date()).getTime(); // time to help stop caching
}
</script>
<img src="http://www.domain.com/testtest.php" onclick="changeImage(this)" />
and in your php add a content header to send the image eg if it is a gif
or png…
<?php
// see link at bottom for getting file extention
switch ($selected_random_file_extention) {
case "gif":
header('Content-type: image/gif');
$file_ext = "gif"; break;
case "jpg":
header('Content-type: image/jpg')
$file_ext = "jpg"; break;
case 3:
header('Content-type: image/png');
$file_ext = "png"; break;
}
//header('Content-type: image/gif'); // send as image
//$random_image_name = rand(1,5);
// you would add $folder.$files[$rand]; and include you script above
$random_image_name = $folder.$files[$rand];
// adjust paths as needed
$img_file = "http://www.domain.com/".$random_image_name.".gif";
// .$file_ext;
readfile($img_file); // not sure how memory will go
?>
The idear is to set the header
content type and to read and write the file to the output buffer using readfile
, armed with this you could use ajax as another means to request the image and using the status
to easly display a loading indicator.
If you where to Rewrite the URL you could change the extension of .php for the src or not even have an extention.
http://php.net/manual/en/function.pathinfo.php
using pathinfo 'extension'
you can get the extention and then set the
approprate Content-type