這樣做不好嗎?通過腳本重定向圖像是不好的做法嗎?
的index.php
<img src = "image.php"/>
image.php
header('location: /location/to/another/image.jpg');
你可能看這個思維 「到底爲什麼他要做到這一點」。以上只是我正在做的一個簡單的場景,我只想知道這樣做是否「可接受」?
這樣做不好嗎?通過腳本重定向圖像是不好的做法嗎?
的index.php
<img src = "image.php"/>
image.php
header('location: /location/to/another/image.jpg');
你可能看這個思維 「到底爲什麼他要做到這一點」。以上只是我正在做的一個簡單的場景,我只想知道這樣做是否「可接受」?
它並不可怕,但大多數建議不要有鏈接/網址重定向時,你並不需要,因爲它會減慢頁面加載(它像做了兩坪,而不是一個乘以每個圖像)
此外它建議配置您的網絡服務器做這樣的事情。我使用nginx,並且我已經爲一個站點的一部分完成了它(它確認用戶已登錄以查看其未發佈的文件)。但是,這是使用x-accel-redirect頭,它不是一個真正的重定向,但只是告訴服務器它應該服務該特定的文件。
當然,你可以做到這一點,但你可能會注意到PHP也可以返回圖像的字節和相應的頭文件(內容類型等)。如果你以後只是簡單地讓你的圖像請求被PHP解析。所以你的image.php請求可以是唯一的請求。
查看有多少用戶訪問這個網頁上PHP's doc page for fpassthru
我寧願發送服務器通過頭一個命令來提供圖像,而不是通過PHP處理它,但這是一個公平的答案。 +1 – 2012-08-05 19:09:25
示例腳本這要看情況。由於acidzombie24提到,這樣的重定向會減慢你的服務器。但是,當您的服務器配置正確並且支持Connection: keep-alive
時,它不需要第二個連接,而只需要在同一連接中發出第二個請求。
據我所知,你試圖通過在URL的末尾附加一個唯一的ID來防止瀏覽器緩存這些圖像。
當你重定向時,你會告訴瀏覽器頭部忘記這個請求,併發起一個請求到另一個URL,所以你會得到每個圖像請求的兩個請求。
而不是強制瀏覽器重定向image.php
,您可以加載圖像文件,它會有重定向瀏覽器(即沒有緩存),但沒有要求另一個請求相同的影響。
在HTML:
<img src="image.php?id=whatever" />
在image.php
:
readfile('location/to/another/image.jpg'); // local file system path needed
完成。瀏覽器沒有緩存,也沒有其他請求的額外開銷。
你爲什麼這樣做? – erenon 2012-08-05 19:04:45
只要它工作,這是可以接受的:)是否這是乾淨的代碼是另一回事。 – favoretti 2012-08-05 19:05:37
說不清楚的原因。 – deceze 2012-08-05 19:05:49