[英]Codeigniter Cart - saving data in database - how to approach?
[英]Codeigniter: preferred approach to store images data in a database
我需要將圖像數據存儲在數據庫中。 我正在將圖像上傳到服務器,然后,當然,我需要從數據庫中檢索它們。 我知道在數據庫中我應該只存儲數據,而將實際文件保留到文件系統中,所以我試圖考慮哪一個可能是保存這些數據的最佳方法。
最讓我困擾的是選擇命名方案。 在數據庫中,我將只有一個filename
名列,其中僅存儲文件名和擴展名。 沒有路徑,因此可以在我的應用程序中對其進行配置。 因此:文件名應使用什么? 我想保留一個有意義的名稱,因此保留照片標題或至少其中一部分很酷。 但是要確保唯一性,哪一種可能是最好的方法?
我知道Codeigniter有一個字符串幫助器,但是我也閱讀了有關使用php函數uniqid的信息。 然后,我可以將id附加到圖片名稱。
你有什么建議?
只要將整個映像存儲在數據庫中,就可以隨意存儲,只要沒有成千上萬的映像即可(或者您只是喜歡購買昂貴的SCSI驅動器:)。 如果不確定,文件系統也可以。
對於圖像的唯一ID,最好的方法可能是僅使用數據庫插入ID(保證唯一,沒有線程/沖突/打擾)。 因此,假設您想將圖像保留在文件系統中,這是一個很好的方法:
create table images (
image_id int(20) primary key auto_increment, /* assumes mysql */
file_path varchar(2500) not null, /* the actual file name and full path */
file_label varchar(255), /** user's memorable name for the file */
description varchar(2500), /** user provided description of contents */
media_type varchar(100), /** something like image/jpeg; privided by php in upload */
);
然后,您可能需要將image_id與某種分類或標簽,一個user_id等連接起來。
編輯
添加評論:
即使您願意,也可以始終使用真實文件名來構建鏈接,即使您將鏈接僅作為圖像ID存儲在文件系統中也是如此。 您只需要利用搜索友好的URL來執行類似的操作(其中1234是圖像ID,/ images /重定向到您的php腳本):
mysite.com/images/db/1234/picture_of_a_cat.jpg)
然后,您只需將/ images / db /重定向到您的php腳本即可。 或者,如果您不想嘗試重寫它們,則可以使用$ PATH_INFO。
例如,如果您擁有mysite.com/images/render.php/1234/picture_of_cat.jpg:
<?php
$parts = explode("/",$PATH_INFO);
$image_id = $parts[3];
$image_from_db = null; //fetch the row from your dabatase here!
header("Content-type: ".$image_from_db['media_type']);
echo file_get_contents($image_from_db['file_path']);
祝好運! ;)
好吧,我更喜歡在圖像名稱中使用哈希,因為如果有兩個相同名稱的圖像會發生這種情況,並且會產生將來的問題。
另一個提示,永遠不要將文件的內容存儲在數據庫中,其成本比僅存儲該文件的路徑要高得多。
將圖像存儲在數據庫中不是一個好主意,而是將指向圖像的鏈接存儲在數據庫中。 例如; 用以下字段創建表
您可以添加任何其他想要的字段
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.