1
爲了保證用戶圖像的安全,我將它們存儲在webroot之外,並在一個額外的「image.php」腳本中使用id檢查來調用它們。腳本內容如下。Fancybox with PHP readfile()img source
session_start();
require("scripts/sqlconnect.php");
$id = $_SESSION['id'];
$img = $_GET['id'];
$img = stripslashes($img);
$img = strip_tags($img);
$sql = mysql_query("SELECT * FROM photos WHERE id='$id'");
$salt = mysql_query("SELECT * FROM members WHERE id='$id'");
$salt = mysql_fetch_array($salt);
$salt = $salt['salt'];
while($row = mysql_fetch_assoc($sql)){
$imgfp = $row['filepath'];
if(hash('sha256', $imgfp.$salt)==$img){
$data = getimagesize($imgfp);
if(!$data){
header('HTTP/1.0 403 Forbidden');
die('The file you requested is not an image.');
}
header('Content-type: ' .$data['mime']);
header('Content-length: ' .filesize($imgfp));
readfile($imgfp);
}
}
我正在運行的問題是利用FancyBox這樣的腳本。當我鏈接到這些圖像時(如下所示),FancyBox無法正常工作,它只是直接鏈接到圖像。有沒有人有FancyBox或類似的腳本,以迎合這種方法調用圖像的經驗?
<a class="fancybox" rel="'.$relgroup.'" href="image?id='.$photofp.'" title="'.$pinfo.'"><img class="tnail" src="'.$tnail.'" /></a>
添加的fancybox的onload事件JS是這樣的:
$(".fancybox")
.fancybox({
padding : 0,
'scrolling' : 'no',
helpers : {
title : {
type: 'outside'
},
}
});
你爲什麼不用''
'標記PHP和數據庫中的數據呢? –
Raptor
@ShivanRaptor如果我從數據庫中構建'
'標記,我將使用硬鏈接到webroot之外的圖像。這些是我不想讓用戶看到的文件路徑。 –
Craig
這是什麼'href =「image?id ='。$ photofp。'」'render?如果它沒有任何圖像擴展名,請嘗試添加'type:「image」'選項 – JFK