img src某個php文件輸出圖片(回復更改圖片readfile讀取圖片等)


在論壇我們經常看到一回復圖片就更改等,這功能是怎么實現的呢,其實更驗證碼道理相同。

新建文件 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();

------解決方案--------------------------------------------------------
這是正常的
因為,圖片不在你的服務器上,只是從遠程讀過來,再傳給客戶端
你服務器,只是一個中轉
既然多了一層中轉,當然慢了,

有一個解決的辦法
就是,
你可以建立一個緩存的目錄
當你碰到一個請求時,查看服務器緩存中是否有,
如果沒有,這個請求是第一次,就把遠程的圖片,存在服務器上
如果有,直接把本服務器的傳給客戶端

這樣,每張圖片,就只要中轉一次了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM