代码改变世界

img src某个php文件输出图片(回复更改图片readfile读取图片等)

2013-08-04 16:41  youxin  阅读(3861)  评论(0)    收藏  举报

在论坛我们经常看到一回复图片就更改等,这功能是怎么实现的呢,其实更验证码道理相同。

新建文件 randimage.php 加入以下代码:

<?php
 $dir='../../images/';
 
 $iforder=1;//顺序显示还是随机;1为顺序,0为随机
 $ifcircle=1; //顺序显示的时候是否循环播放,1为循环播放,0为不循环
 
 session_start();
 $handle=opendir($dir);
 while($fileName=readdir($handle))
 {
     if($fileName!='.'&&$fileName!='..')
     {
         $fileList[]=$fileName;
     }
 }
 closedir($handle);
 if($iforder==1)
 {
     if(isset($_SESSION['order']))
     {
         if($_SESSION['order']<count($fileList)-1)
         {
             $_SESSION['order']++;
         }
         else
         {
             if($ifcircle==1)
             {
                 $_SESSION['order']=0;
             }
         }
     }
     else
     {
         $_SESSION['order']=0;
     }
     
     $i=$_SESSION['order'];
 }
 else
 {
     $num=count($fileList)-1;
     $i=rand(0,$num);
 }
 
 
$file=$dir.$fileList[$i];
 
$info=getimagesize($file);
 

 header("Content-type:{$info['mime']}");
// print_r($info);
 readfile($file);
 

             

这个php就输出了一个图片文件。

我们在其他网页调用就可以了。

<img src="randomImage.php" border=0 />

src为生成图片的php文件。

 附一篇帖子:

用readfile函数读取图片时碰到的问题
我打算在一个页面显示图片,不是直接给出img的scr,而是由一个readfile函数输入,相当于由服务器读取图片再输出.
前台的页面如下:

<img src="http://mywebsite.com/getobj1.php?path=www.abc.com/images/11.jpg"" border="0">
<img src="http://mywebsite.com/getobj1.php?path=www.abc.com/images/12.jpg"" border="0">
...
<img src="http://mywebsite.com/getobj1.php?path=www.abc.com/images/11.jpg"" border="0">


后台的getobj1.php代码如下
<?php
header('Content-Type: image/jpeg');
readfile($_GET["path"]);
?>

现在问题是这样的:
图片都能显示正常,而且也的确是由服务器读取来的.(因为有些图片直接访问不到..GFW)
但是这些图片显示的时候是一个一个显示出来的.而不是像正常访问的时候那样是一起显示出来的.
这个有什么办法没,是图片所在服务器的问题还是PHP的机制问题?
请大家帮帮忙

------解决方案--------------------------------------------------------
应该是代码的问题 楼主可以从缓存这个角度去考虑 可以一次性读取 缓存起来 再输出  
ob_start
···//处理读出图片显示等操作
ob_flush();
flush();

------解决方案--------------------------------------------------------
这是正常的
因为,图片不在你的服务器上,只是从远程读过来,再传给客户端
你服务器,只是一个中转
既然多了一层中转,当然慢了,

有一个解决的办法
就是,
你可以建立一个缓存的目录
当你碰到一个请求时,查看服务器缓存中是否有,
如果没有,这个请求是第一次,就把远程的图片,存在服务器上
如果有,直接把本服务器的传给客户端

这样,每张图片,就只要中转一次了。