隐形术的 发表于 2011-2-1 23:16

求助PHP达人,随机论坛头像的代码

我搜到一个可以使用随机头像的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 文件结束表,不可缺少。 ?>

holywind 发表于 2011-2-1 23:24

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

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

holywind 发表于 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/face/1.php?a.gif
然后 你复制我这段上去看看吧
http://www.hobobox.cn/
这是我首页的随机JS特效 1行搞定


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


PS:把错误代码发上来看看 顺便给个探针


<?php

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

$rnd = rand(0, count($files) - 1);
$filename = $files[$rnd];

return $dir . $filename;
}


function get_file($filename) {
clearstatcache;

if(!file_exists($filename)) {
echo("文件不存在: $filename");
exit;
}


$f = fopen($filename, 'r');
if(!$f) {
echo("无法打开文件: $filename");
exit;
}
$s = fread($f, filesize($filename));

fclose($f);

return $s;
}
echo(get_file(get_rnd_file('img/')));
?>

holywind 发表于 2011-2-2 10:03

/face/face.php
把图放/face/img/里   然后代码用echo(get_file(get_rnd_file('img/')));

hein 发表于 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才能成功~~
页: [1]
查看完整版本: 求助PHP达人,随机论坛头像的代码