在論壇我們經常看到一回復圖片就更改等,這功能是怎么實現的呢,其實更驗證碼道理相同。
新建文件 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();
------解決方案--------------------------------------------------------
這是正常的
因為,圖片不在你的服務器上,只是從遠程讀過來,再傳給客戶端
你服務器,只是一個中轉
既然多了一層中轉,當然慢了,
有一個解決的辦法
就是,
你可以建立一個緩存的目錄
當你碰到一個請求時,查看服務器緩存中是否有,
如果沒有,這個請求是第一次,就把遠程的圖片,存在服務器上
如果有,直接把本服務器的傳給客戶端
這樣,每張圖片,就只要中轉一次了。