你看你看,我的论坛头像随机在变
技术与开发
我在《电脑报》论坛里面看到,有些会员的头像在每次页面刷新后都会变化(图1)。我觉得这种效果很有趣,但不知是怎么实现的呢?

这种效果主要是使用PHP语言中的随机函数实现的。首先获取图片文件的文件名并写入一个数组中,然后利用随机函数从数组中抽取一个文件名,最后读取该文件的内容并使用输出显示即可。利用相同的原理,我们的个性签名也可以随机替换。
我们做了PHP和ASP的论坛随机头像替换插件(下载地址:http://www.cpcw.com/bzsoft),大家下载后放到Images/Avatars文件夹,并将根目录下的Member.php或smiley.asp替换即可。
小知识: 几乎每种编程语言中都有随机函数。其作用是每次被调用后无规律的返回某个范围内的数字,设计抽奖程序、安全密码生成程序以及验证码时都会用到随机函数。
第一步:收集图片
将图片文件收集后统一放在一个文件夹中,例如 IMG 文件夹。图片格式没有特殊要求,只要能被浏览器识别即可,例如GIF、JPEG、PNG、BMP等。文件名不建议使用中文。
第二步:编写随机替换功能代码
点击“开始→所有程序→附件→记事本”,打开记事本, 然后输入代码中文输入其中关键代码如下(完整代码下载地址:http://www.cpcw.com/bzsoft):
// 打开图片文件夹以获取操作句柄,如果打开失败则输出提示文字。
$dir_h = @opendir($dir);
if(!$dir_h) {
echo("无法打开指定目录: $dir");
exit;
}
// 声明一个数组。
$files = array();
// 遍历文件夹中所有的文件。
while (false !== ($file = readdir($dir_h))) {
if ($file != "." && $file != ".." && $file + '' != $_SERVER['PHP_SELF']) {
// 将符合条件的图片文件的文件名写入数组中。
array_push($files, $file);
}
}
// 获得一个 0~图片文件总数 之间的数字。
$rnd = rand(0, count($files) - 1);
// 获得索引为$rnd的数组元素中的文件名。
$filename = $files[$rnd];
// 返回 “路径+文件名”(需要自己动手修改)。
return $dir . $filename;
// 获取指定文件的内容,参数 $filename 传入要获取内容的文件。
function get_file($filename) {
clearstatcache;
// 检测文件是否存在。
if(!file_exists($filename)) {
echo("文件不存在: $filename");
exit;
}
// 打开文件以获取操作句柄。打开失败则输出提示文字。
$f = fopen($filename, 'r');
if(!$f) {
echo("无法打开文件: $filename");
exit;
}
// 将文件的内容读取到 $s 这个变量中。
$s = fread($f, filesize($filename));
// 操作完成后要关闭用 fopen 函数打开的操作句柄,切记切记!
fclose($f);
代码输入完毕后,按组合健“Ctrl+S”打开保存文件对话框,在下方 “保存类型”的下拉列表框中选择“所有文件”,在“文件名”字样后面的编辑框中输入Face.php,然后单击“保存”按钮即可。
第三步:在论坛中添加代码
现在我们要把IMG图片文件夹和刚才编写的PHP文件上传到论坛中引用。下面以《电脑报》论坛引用为例:先用注册的用户名和密码登录,然后单击网页右上角的“控制面板”,选择网页左边的“编辑个人资料→个性化资料”,再在“头像”字样后面的第一个编辑框中输入 http://空间域名/face.php?a.gif(见图2),单击提交按钮。这样在你回复过的帖子中就能看到效果了。

总结
这种随机显示效果,不仅可以用来做头像,还可以用在网站的广告显示中。每刷新一下网页就会看到不同的广告,与一成不变的广告显示效果相比,更能吸引访客的眼球。