2012-10-10 50 views
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' 
      }, 
     } 
    }); 
+0

你爲什麼不用'''標記PHP和數據庫中的數據呢? – Raptor

+0

@ShivanRaptor如果我從數據庫中構建''標記,我將使用硬鏈接到webroot之外的圖像。這些是我不想讓用戶看到的文件路徑。 – Craig

+0

這是什麼'href =「image?id ='。$ photofp。'」'render?如果它沒有任何圖像擴展名,請嘗試添加'type:「image」'選項 – JFK

回答

1

我協助評論想通了這一點從JFK以上。

我創建了一個新類.fancyboximg,並將圖像類型與打開帖子中陳述的原始onload更改一起添加到該類。

圖像現在在FancyBox中打開所需的!

$(".fancyboximg") 
.fancybox({ 
    'type' : 'image', 
    padding : 0, 
    'scrolling' : 'no', 
    helpers : { 
     title : { 
     type: 'outside' 
     }, 
    } 
});