找回密码
 立即注册
搜索
查看: 2884|回复: 8

[其他] 求助PHP达人,随机论坛头像的代码

[复制链接]
     
发表于 2011-2-1 23:16 | 显示全部楼层 |阅读模式
我搜到一个可以使用随机头像的php代码
来源:http://bbs.icpcw.com/viewthread.php?tid=1359475

大意就是,传一些图片到我的空间里的face文件夹,只要输入http://我的域名/face/face.php?a.gif,即可在论坛随机显示我所传的所有图像作为随机头像

但是我打开我的  http://我的域名/face/face.php?a.gif  之后,发现返回的结果是“目录不存在”

求解·~

以下为代码...


<?php // PHP 文件开始标记,不可缺少。

// 获得一个随机文件名,参数 $dir 传入图片文件夹路径
function get_rnd_file($dir) {
// 清除文件状态缓存
clearstatcache;
// 从参数传入的图片文件夹不存在
if(!is_dir($dir)) {
echo('目录不存在');
exit;
}

// 打开图片文件夹以获取操作句柄,如打开失败则输出提示文字。
$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);

// 函数本身返回文件内容。
return $s;
}

// 输出获取到的文件内容。
echo(get_file(get_rnd_file('img/')));

// PHP 文件结束表,不可缺少。 ?>
回复

使用道具 举报

     
发表于 2011-2-1 23:24 | 显示全部楼层
// 输出获取到的文件内容。
echo(get_file(get_rnd_file('img/')));

你上传的图片应该在img目录下
回复

使用道具 举报

     
发表于 2011-2-1 23:28 | 显示全部楼层
// 输出获取到的文件内容。
echo(get_file(get_rnd_file('img/')));
改成
echo(get_file(get_rnd_file('face/'))); 试试
回复

使用道具 举报

     
 楼主| 发表于 2011-2-2 00:55 | 显示全部楼层

回 2楼(holywind) 的帖子

我直接把face文件夹改成img 还不行呢~~
回复

使用道具 举报

发表于 2011-2-2 07:05 | 显示全部楼层
楼主你那什么破空间 你刷新这页面看看。

然后 你复制我这段上去看看吧
http://www.hobobox.cn/
这是我首页的随机JS特效 1行搞定


程序本身无问题,出问题就是你空间不支持或者楼主你烦了低级错误
PHP有专门的绘图函数,还可以在随机数出的图片上写字
研究所的有个结合mysql+sourceserver+php+css的排行就是这样的
啊 说远了


PS:把错误代码发上来看看 顺便给个探针
  1. <?php
  2. function get_rnd_file($dir) {
  3. clearstatcache;
  4. if(!is_dir($dir)) {
  5. echo('目录不存在');
  6. exit;
  7. }
  8. $dir_h = @opendir($dir);
  9. if(!$dir_h) {
  10. echo("无法打开指定目录: $dir");
  11. exit;
  12. }
  13. $files = array();
  14. while (false !== ($file = readdir($dir_h))) {
  15. if ($file != "." && $file != ".." && $file + '' != $_SERVER['PHP_SELF']) {
  16. array_push($files, $file);
  17. }
  18. }
  19. $rnd = rand(0, count($files) - 1);
  20. $filename = $files[$rnd];
  21. return $dir . $filename;
  22. }
  23. function get_file($filename) {
  24. clearstatcache;
  25. if(!file_exists($filename)) {
  26. echo("文件不存在: $filename");
  27. exit;
  28. }
  29. $f = fopen($filename, 'r');
  30. if(!$f) {
  31. echo("无法打开文件: $filename");
  32. exit;
  33. }
  34. $s = fread($f, filesize($filename));
  35. fclose($f);
  36. return $s;
  37. }
  38. echo(get_file(get_rnd_file('img/')));
  39. ?>
复制代码
回复

使用道具 举报

     
发表于 2011-2-2 10:03 | 显示全部楼层
/face/face.php
把图放/face/img/里   然后代码用echo(get_file(get_rnd_file('img/')));
回复

使用道具 举报

     
发表于 2011-2-2 14:40 | 显示全部楼层
为啥一个随机要那么多步骤?用随机跳转不就行了?
回复

使用道具 举报

     
 楼主| 发表于 2011-2-3 01:44 | 显示全部楼层
谢谢各位大大

我现在成功了!



代码如下,以下代码做成face.php

<?php

$okext = array("jpg", "jpeg", "gif", "png");
$dir = 'images';
if ($handle = opendir($dir)) {
  while (false !== ($file = readdir($handle))) {
    $ext = pathinfo($file);
    $ext = $ext["extension"];
    if ($file != "." && $file != ".." && in_array($ext, $okext)) {
        $imfiles[] = $file;
    }
  }
  closedir($handle);
}

$id = rand(0, count($imfiles)-1);
header('Content-Disposition: inline;');
readfile($dir."/".trim($imfiles[$id]));
?>


目录是这样的
空间根目录下建立一个face文件夹
face文件夹之下建立一个images文件夹
face.php放在face文件夹里
头像(我全部统一改成jpg格式 120*120)放在images文件夹

在论坛里
支持php结尾的论坛用http://我的域名/face/face.php
不支持php结尾的论坛用http://我的域名/face/face.php?.jpg

请问这种科学吗!!
回复

使用道具 举报

     
 楼主| 发表于 2011-2-3 01:45 | 显示全部楼层
一般刷新不能刷出另一个头,必须要ctrl+F5才能成功~~
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|上海互联网违法和不良信息举报中心|网上有害信息举报专区|962110 反电信诈骗|举报电话 021-62035905|Stage1st ( 沪ICP备13020230号-1|沪公网安备 31010702007642号 )

GMT+8, 2025-9-17 08:26 , Processed in 0.081088 second(s), 7 queries , Gzip On, Redis On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表