我如何創建一個php代碼來處理一個ID,例如返回相應的圖像而不提供客戶端的實際圖像熱鏈接。如何顯示圖像隱藏其在PHP中的直接鏈接?
正如下面的鏈接實現的圖像顯示在HTML頁面,但熱鏈接對客戶端隱藏。即使在新窗口中打開圖像,也會顯示相同的鏈接,而不是圖像的原始鏈接。
這絕對沒有在.htaccess文件中實現,因爲每個圖像的URL與id相應的圖像呈現,而不是重定向到單個頁面。
http://www.imagesup.net/?di=15140291437113
我如何創建一個php代碼來處理一個ID,例如返回相應的圖像而不提供客戶端的實際圖像熱鏈接。如何顯示圖像隱藏其在PHP中的直接鏈接?
正如下面的鏈接實現的圖像顯示在HTML頁面,但熱鏈接對客戶端隱藏。即使在新窗口中打開圖像,也會顯示相同的鏈接,而不是圖像的原始鏈接。
這絕對沒有在.htaccess文件中實現,因爲每個圖像的URL與id相應的圖像呈現,而不是重定向到單個頁面。
http://www.imagesup.net/?di=15140291437113
一種基本的方法可以是這樣的
<?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;
?>
你需要根據自己的需要來定義getImagePath
和getContentType
功能。
創建要在img標籤的src作爲使用PHP腳本。
在該腳本中從file_get_contents
獲取圖像中的數據。然後用正確的mime類型發送標題。例如header('Content-type: image/jpeg');
然後輸出數據。
每當一個衝浪者進入我的一個網站時,我總是給他分配一個會話。該會話包含一些信息,例如:代理,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!)來驗證,它對我來說看起來相當完美,並且符合我的需求。
這裏的挫折之一是資源和性能。但既然我不強迫你,你可以測試和評估。希望有所幫助!
其實,當我點擊那個鏈接它*下載*圖像,它甚至不顯示它在瀏覽器中。這一切都只是通過HTTP引用程序和可能的Accept頭完成的。正如所證明的,它並不總是有效。 – deceze
如果點擊下載圖片,它會顯示此鏈接指向圖片,即使它不是熱鏈接,這正是這裏所需要的。它正在工作。 – XIMRX