2014-06-16 41 views
0

我如何創建一個php代碼來處理一個ID,例如返回相應的圖像而不提供客戶端的實際圖像熱鏈接。如何顯示圖像隱藏其在PHP中的直接鏈接?

正如下面的鏈接實現的圖像顯示在HTML頁面,但熱鏈接對客戶端隱藏。即使在新窗口中打開圖像,也會顯示相同的鏈接,而不是圖像的原始鏈接。

這絕對沒有在.htaccess文件中實現,因爲每個圖像的URL與id相應的圖像呈現,而不是重定向到單個頁面。

http://www.imagesup.net/?di=15140291437113

+0

其實,當我點擊那個鏈接它*下載*圖像,它甚至不顯示它在瀏覽器中。這一切都只是通過HTTP引用程序和可能的Accept頭完成的。正如所證明的,它並不總是有效。 – deceze

+0

如果點擊下載圖片,它會顯示此鏈接指向圖片,即使它不是熱鏈接,這正是這裏所需要的。它正在工作。 – XIMRX

回答

3

一種基本的方法可以是這樣的

<?php 

    // query to database mabye? 
    $myPath = getImagePath($_GET['id']); 

    // what kind of image file is that? 
    $contentType = getContentType($myPath); 

    // read file content 
    $img = file_get_contents($myPath); 

    // here you tell the browser what kind of image is that e.g. jpeg,png,gif... 
    header("Content-Type: $contentType"); 

    echo $img; 

?> 

你需要根據自己的需要來定義getImagePathgetContentType功能。

+0

這可能是答案,讓我嘗試之前,我選擇你的答案。 – XIMRX

+0

@XIMRX如果您有任何疑問,請隨時詢問 – lelloman

0

創建要在img標籤的src作爲使用PHP腳本。

在該腳本中從file_get_contents獲取圖像中的數據。然後用正確的mime類型發送標題。例如header('Content-type: image/jpeg');然後輸出數據。

1

每當一個衝浪者進入我的一個網站時,我總是給他分配一個會話。該會話包含一些信息,例如:代理,IP,語言,日期等等,並通過cookie或GET(作爲參數傳遞給我的每個頁面)傳遞。

由於我處理了很多圖像內容,我開始databasing我的收藏。這基本上意味着爲了管理和集羣的目的,我將所有圖像保存到一個多宿主的SQL數據庫中,並跨越多個服務器。人們可以爭辯說,如果這是一件明智的事情,但我們可以在另一天和另一篇文章中爭辯。

我寫的這是整個我的網站使用的小腳本:

<img src="http://example.com/display.php?id=34" border="0" alt="" /> 

隨着課程的不斷變化的ID。這是在數據庫中引用我的圖像的部分。 以下是從腳本,我用它來從數據庫中檢索圖像的代碼:

<?php 
[email protected]_connect(...); 

@mysql_select_db(...); 

$query="SELECT mime, file FROM images 

WHERE id=".$_GET["id"]; 

[email protected]_query ($query,$connection); 

if($rawdb AND @mysql_num_rows($rawd-->0){ 

    [email protected] mysql_fetch_array($result); 

    if (!empty($array["fileContents"])){ 

    // Output the MIME header 

    header("Content-Type: ".$array["mime"]}"); 

    // Output the image 

    echo $array["file"]; 

    }else{ 

    // something else... 

    } 

    @mysql_free_result($rawdb); 

}else{ 

    // something else... 

} 

@mysql_close($connection); 

?> 

因爲我已經有這使我的網站的每個用戶會話,我只是增加了以下內容:

<img src="http://example.com/display.php?id=34&sid=383829" border="0" alt="" /> 

和執行腳本本身很小會話檢查:

<!-- 
session_start(); 

if($_SESSION["is_known"]){ 

    // do database calls 

}else{ 

    header("Location:http://mydomain.tld/dontsteal.html"); 

} 

--> 

的主要優點我的方法是,該會議是完全服務r方。用戶不能擺脫它或僞造信息。由於我有一個超時並保存所有必要的信息(IP!)來驗證,它對我來說看起來相當完美,並且符合我的需求。

這裏的挫折之一是資源和性能。但既然我不強迫你,你可以測試和評估。希望有所幫助!

+1

,但是如果人員刷新頁面,他將顯示錯誤 –

+0

不,它不顯示錯誤! – Evenure

+0

不錯的做法,但涉及太多的資源並且僅限於註冊用戶的內容。可能有助於不同的情況。 – XIMRX