2012-04-11 45 views
0

首先,我對標題感到抱歉。我找不到更好的。緩存多個域的1個文件

我有一個圖像文件,由PHP腳本生成。此腳本(圖像)連接到數據庫並將其引用URL保存在表中。 由於輸出圖像沒有改變,我認爲最好是緩存它。但據我所知,如果我緩存一個文件(例如http://www.example.com/img.png.php),在每個頁面上,瀏覽器從緩存中讀取它。這對我的劇本不好。因爲在第一次通話時,它會保存引薦網址並通過瀏覽器進行緩存。在接下來的調用中,在不同的網站(引用者)上,將使用緩存版本,並且瀏覽器不會向服務器發送任何請求,並且最終引用URL不會保存在數據庫中。

我可以對瀏覽器說,請緩存每個域​​的圖像副本1份? 我的意思是:

http://wwww.abc.com/index.html發送一個請求,讓我的圖像(腳本)

瀏覽器檢查其高速緩存,並沒有找到它。所以從 服務器得到它。和PHP腳本保存引薦網址。

用戶轉到ABC.COM的另一頁面。 (例如:http://wwww.abc.com/about.html)瀏覽器檢查緩存,它會發現 它。所以不會向服務器發送請求以獲取文件內容。 和PHP腳本不會運行。

另一個網站(http://wwww.efg.com/index.html)發送請求讓我的圖像(腳本) 瀏覽器檢查緩存,並且不會找到它。所以發送文件 內容的請求。和PHP腳本運行...............................

這可能嗎? (抱歉長文本,有很多語法問題)

+0

HTTP引用是完全不可靠的反正 – 2012-04-11 20:34:24

回答

1

你可以使用一個重定向頁面(未緩存),節省引薦到您的數據庫,然後重定向到緩存的圖像。

這樣你總能得到一擊,但實際的圖像被緩存。


在你的HTML,你可以使用:

<img src="/image.php"> 

而且在image.php

<?php 
    // save the referrer in here 

    header('Location: /image.jpg'); 
?> 

/image.jpg是你的實際圖像(可緩存)

+0

我無法理解。你能解釋更多嗎? – mrdaliri 2012-04-11 20:49:40

+0

答案已更新,我希望這可以說明問題。 – stewe 2012-04-11 20:56:38

0

似乎是一個櫃檯,我說得對嗎?

AFAIK你不能完全按照你的解釋。

但你總是可以「緩存」在服務器端的圖像,所以你就不需要重繪:

<? 
/* 
    do some stuff 
*/ 
// send an image: the content-type first 
header('Content-type: image/png'); 
// and the image 
readfile('myImage.png'); 
+0

圖片是一個例子。它可以是一個腳本,樣式表等。 – mrdaliri 2012-04-11 20:38:20

1

首先,想想用戶的體驗:您是否真的需要增加引用鏈接功能的頁面加載時間?此外,您應該知道,許多瀏覽器/隱私工具配置首先抑制或不發送Referer標題。

如果您確實希望每次加載資源(JavaScript,樣式表,圖像...),則可以發送Cache-Control HTTP header以防止緩存。例如,爲了防止referer.js緩存時使用Apache送達,添加以下.htaccess文件在相同的目錄(需要mod_header):

<FilesMatch "^referer\.js$"> 
Header set Cache-Control no-cache 
</FilesMatch> 
+0

因爲我考慮用戶,我想緩存它。我的意思是可以瀏覽器緩存兩個不同的網站相同的文件(引薦) – mrdaliri 2012-04-11 20:54:56