Home > WordPress > PHP随机显示目录下的图片
2009November . 30th

PHP随机显示目录下的图片

前言

在不久前,推特上,@doublechou(才女,大家follow之,博客)正在做主题(现在她暂时用iNove了)。她当时想做一个随机更换背景图片的功能,用JavaScript写的话,程序流程应该是:建立一个图片数组->随机选择数组里其中一个值->生成样式并写入body标签
可是用JS做的话,有以下缺点:
1.万一浏览器禁用了JS的话就失效了,而且写代码是需要考虑兼容性。
2.维护比较麻烦,图片的位置都存放在数组里。
于是我提议用PHP处理,可是我和她对PHP都是半桶水的,一时之间也想不出怎么做。今天时运高,看到一个PHP随机显示目录下图片的源码,学习一下,并分享之。

正文

先看看原理:从一个目录里获取某类型文件的清单(用在WEB的话一般是jpg/gif/png)->通过随机函数选一个图片->输出代码
PHP代码如下:

 $imglist='';
  //用$img_folder变量保存图片所在目录,必须用“/”结尾
 $img_folder = "images/tutorials/";
 
  mt_srand((double)microtime()*1000);
 
  //使用目录类
 $imgs = dir($img_folder);
 
  //检查目录下是否有图片,并生成一个清单
 while ($file = $imgs->read()) {
   if (eregi("gif", $file) || eregi("jpg", $file) || eregi("png", $file))
     $imglist .= "$file ";
 
 } closedir($imgs->handle);
 
  //把清单里的项都放到一个数组里
 $imglist = explode(" ", $imglist);
 $no = sizeof($imglist)-2;
 
 //生成一个介于0和图片数量之间的随机数
 $random = mt_rand(0, $no);
 $image = $imglist[$random];
 
//输出结果
 echo '<img src="'.$img_folder.$image.'" border="0/" alt="" />';

如果要通过这个函数变换页面背景的话,可以把最后一句改为:

echo '<body style="background-image:'.$img_folder.$image.'>';</body>

并用整段程序替换<body>标签。
如果需要多次调用此程序的话,可以写成一个函数,各位按需要改写。

总结

用PHP的方法来输出随机图片的好处是:
1.维护简单,只需要控制目录里图片的数量。
2.可以自定义文件类型,只要你有需要,改成随机输出一个Flash也行的
3.可以自定义输出结果,换句话说,用在什么地方都行了
4.改写成函数后功能更强大

, 推荐到豆瓣
  1. 2009November . 30th - 7:39 PM

    好方法,记下了

  2. 2009November . 30th - 8:32 PM

    呵呵 我的订阅就这样弄的

  3. 2009November . 30th - 9:35 PM

    对于PHP你比我懂多了

  4. 2009November . 30th - 9:45 PM

    这个很花枝招展啊,以后每天都换背景图。

  5. 2009November . 30th - 9:55 PM

    你这个不适合我的博客!暂时记下了!等有用的时候用上!

  6. 2009November . 30th - 10:09 PM
  7. 2009November . 30th - 11:20 PM

    很不错,比js的要好

  8. 2009December . 1st - 10:18 AM

    这效果不错。

    主页又换了?我又一位跑错了

  9. 2009December . 1st - 12:34 PM

    @北北
    订阅地址不需要经常换吧?
    @卢松松
    我也是在学习中
    @GEZ鸽子
    终会有点用的
    @zwwooooo
    应该还会换,我一直不满意

  10. 2009December . 1st - 3:13 PM

    俺对PHP也不是很熟练哈。

  11. 2009December . 1st - 4:50 PM

    还是用php比较好解决点

  12. 2009December . 1st - 10:28 PM

    技术贴,咱飘……

  13. 2009December . 2nd - 10:01 AM

    听到随机我就感觉不是很喜欢的说

  14. 2009December . 2nd - 11:05 AM

    飘过 ~~ 不太喜欢来回换背景。。当然别的地方可以考虑一下,比如某个小地方。

  15. 2009December . 2nd - 1:07 PM

    某个小地方的话,可以使用哪种调用随机图片的幻灯片

  16. 2009December . 2nd - 1:38 PM

    这方法不错哈哈

  17. 2009December . 2nd - 4:20 PM

    Matt曾经有段PHP,也是这功效~

  18. 2009December . 3rd - 6:04 PM

    PHP不错啊 呵呵, 我给收藏个~

  19. 2009December . 3rd - 10:18 PM

    先收藏了,方便以后使用~~

  20. 2009December . 4th - 3:27 PM

    没有效果预览啊。

  21. 2009December . 4th - 4:36 PM

    PHP这么厉害. 快快出第二个插件把!

  22. 2009December . 4th - 4:49 PM

    @超人
    你想要有什么功能的插件?

  23. 2009December . 4th - 9:52 PM

    @bolo
    来个可以一键关机的。 哈哈

  24. 2009December . 5th - 8:43 AM

    这个博客很好看啊。来啦。

  25. 2009December . 5th - 11:07 AM

    学习了……

  26. 2009December . 11th - 1:39 AM

    不错的,用的好了可以直接取flickr相册。像你有代理可以直接取picasa相册。我的最终目的就是这个。因为我做的主题高仿电脑桌面,随机换壁纸肯定要有的。

  27. 2009December . 11th - 11:50 AM

    @玛格丽特苏
    获取Flickr的相片更加简单,可以通过API获得

  28. 2010January . 24th - 6:25 PM

    如果以数字命名图片那就可以不用数组了,直接用随机数函数生成随机的图片名称。

  29. 2010January . 24th - 9:59 PM

    @shuil
    如果像你这样做,我添加或者减少一个图片不就要修改一次函数了?

  30. 2010January . 24th - 10:06 PM

    @bolo 这的确是麻烦了

  31. 2010March . 29th - 8:10 AM

    好方法啊,正准备用在博客顶部了。谢谢!!!

  32. 2010March . 29th - 8:12 AM

    刚一看,你说的这个才女因为没钱,网站域名关之。

  33. 2010March . 29th - 8:12 AM

    @万戈
    超强,哪都能见到你!我google半天逃不开见到你。

  34. 2010July . 17th - 6:16 PM

    收藏了哈!说不定哪天能用到呢!!!

  35. 2011June . 20th - 4:08 PM

    好东东,先收下,以后应该用得着的

Subscriber selector

Close