2012-05-09 91 views
4

我接管了一個CodeIgniter PHP網站,該網站可動態生成已調整大小的圖像和縮略圖。PHP動態圖像

這裏是產生站點的img標籤的一個例子的由100像素縮略圖100像素:

<img src="/media/image/ImageName.jpg/100/100" /> 

這是通過使用輔助生成:

echo img('media/image/ImageName.jpg/100/100'); 

有在一些邏輯媒體控制器中的圖像功能,它首先檢查緩存文件夾,然後在緩存圖像存在的情況下提供緩存圖像。

它仍然似乎這不是一個優雅的方法,並在尋找的路上像SilverStripe其他PHP框架做到這一點,這將是更好的做這樣的事情:

echo img_link('ImageName.jpg', 100, 100); 

這個新img_link功能的助手會首先檢查緩存的圖像,並將鏈接直接寫入圖像文件或生成新圖像並將直接鏈接傳遞給html。

我的想法是,如果PHP使用這種類型的代碼

$this->output->set_content_type('jpeg')->set_output(file_get_contents($file_path)); 

服務每img它永遠是低效的。

想到任何人?

+0

你是否試圖保持相同比例的雙方或smoosh /將圖像拉伸到您輸入的任何尺寸? – AMayer

+0

有幾種情況。一種是在沒有任何用戶輸入的情況下生成縮略圖,另一種是用戶將大圖像的區域定義爲縮略圖的縮略圖。 –

回答

1

我同意,我做了你提出什麼(直接寫入如果它已經被緩存的鏈接),它工作正常。

我能想到你會被抓住了唯一的一次是,如果你的HTML被緩存,並且您已經刪除緩存圖像,所以直接鏈接到鏡像文件正在打破。

在我的情況,我從來沒有刪除緩存圖像,所以沒有擊中那呢。

唯一的另一種情況,我可以看到它是一個問題是如果你有私人圖像。在這種情況下,php需要在顯示圖像之前首先檢查哪些人有權限,但不能僅將緩存文件作爲直接鏈接提供,因爲人們可以共享該直接鏈接,並且安全性將不再適用。

如果您確實需要這樣做,並且您能夠在apache上安裝模塊(假設您使用的是apache),那麼會有一個模塊「x-sendfile」,它將允許您將文件交付過程切換回apache ,而不是通過PHP。這對於那些php可能超時的大文件是很好的,等等。

+0

感謝您的加分,好好想想。 –