我們將圖像緩存爲多種尺寸。PHP調整大小圖像的模糊URL
圖像信息:
- 原始地址:http://www.example-store.com/images/some-image.jpg
- 寬度:120
- 高度:150
- 首選的圖像文件名:圖像文件-name.jpg
所以我們建立下面的圖像緩存URL:
http://cache.example.com/image/120x150/ksjdaflkj678687TYTGGGShjk78/image-file-name.jpg
,當請求此URL,http://cache.example.com/image/120x150/ksjdaflkj678687TYTGGGShjk78/image-file-name.jpg,這是改寫的場景(htaccess的類型的東西)到身後:http://cache.example.com/image.php?height=120&width=150&originalUrlHashed=ksjdaflkj678687TYTGGGShjk78&preferredFileName=image-file-name.jpg
散列圖像進行解碼,從原來的位置下載,調整大小和物理存儲這裏:/image/120x150/ksjdaflkj678687TYTGGGShjk78/image-file-name.jpg。 爲什麼?因爲在第二個請求中,文件物理上存在於磁盤上並作爲普通文件返回,然後我們可以使用apache2 mod_expires緩存,並且不會在每個請求上下載並調整圖像大小。
的問題是與遠程圖像URL是這樣的:
原始的圖像的哈希值是:
- eNptzbtOAzEQheGnoZwdr40JQkJIBIo0kI5y5cusM4pjWx4j5fFJICXt_x3pHMZoT4g8Rcp5CvWE0Qme3eTkcMaUq3cZhAdBJOFU7rT6en9FZR6MUXYD3vtH8LPR4Fcd4F4HFZ01q9MzzvjZOXFxeV_SC8fnt8sH7nuN32Esu5NLJHhtyzYzlbHcSPCjDvK1HgV3RRr3WpZ_0my7EHqSUVfMro3agG8 IvwgbqxUkKtQ5wN8SrFJQ0tQk_gCey1fZ
這使URL看起來像這樣:
此URL的哈希部分超過255個字符,這使得Apache的錯誤 - https://serverfault.com/questions/120397/max-length-of-url-257-characters-for-mod-rewrite
編輯:只需添加 - 問題是散列的長度。使用255字符以下的散列,此解決方案完美工作。
這裏有幾方面的考慮:
- 緩存URL是在不同的服務器上從調用它。他們不共享數據庫,所以原始URL必須包含在URL中。
- 我需要散列URL並使用散列作爲目錄名稱,以便我們可以物理上將調整大小的文件保存到磁盤以備將來使用。
- 這意味着,根據要求 - 它魔法般地製作文件並將其保存到磁盤。根據要求二,它只是返回物理圖像。
- 如果cache.example.com和調用URL的網站位於同一臺服務器上,並且可以共享數據庫,那麼我們可以將圖像URL保存到一個表中,並返回一個散列或關鍵字或其他內容。不幸的是,這不是一個選項。
解決方案?
- 我能想到的唯一解決方案是以某種方式壓縮URL。然而,因爲我需要(我也是)base64對它進行編碼以使其沿着URL工作,所以這增加了額外的大小。
有沒有人有任何想法?
我遇到的問題與this question非常相似。
只需添加 - 問題與散列的長度。使用255字符以下的散列,此解決方案完美工作。 – HenryHayes 2013-04-28 15:18:06
您使用的散列算法與原始數據幾乎一樣長? – 2013-04-28 15:19:26
HiÁlvaroG.Vicario,$ hash = strtr(base64_encode(gzcompress($ url,9)),'+/=','-_〜');而解碼則相反。當然,這不是一個哈希。它必須是可解碼的,所以我已經檢索了URL。 – HenryHayes 2013-04-28 15:32:22