Codeigniter:在数据库中存储图像数据的首选方法

时间:2011-12-02 22:16:59

标签: php image codeigniter filenames

我需要将图像数据存储在数据库中。我正在将图像上传到服务器然后,当然,我需要从数据库中检索它们。我知道在数据库中我应该只存储将实际文件留给文件系统的数据,所以我想要考虑哪一个可能是保存这些数据的最佳方法。

最让我困扰的是选择命名方案。在数据库中,我只有一个filename列,只存储文件名和扩展名。没有路径,所以我可以在我的应用程序中配置它。那么:我应该用什么文件名?我想保留一个有意义的名字,所以保留照片标题或至少是其中的一部分会很酷。但要确保唯一性,哪一种可能是最好的方法?

我知道Codeigniter有一个字符串助手,但我也读到了使用php函数uniqid。然后我可以将id附加到图片名称。

你有什么建议?

3 个答案:

答案 0 :(得分:1)

随意将整个图像存储在数据库中,只要不会有数十万个(或者您只是为昂贵的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也是如此。你只需要利用search friendly urls来做这样的事情(其中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']);
祝你好运! ;)

答案 1 :(得分:0)

好吧,我更喜欢你在图像名称中使用哈希值,如果有两个同名图像会发生这种情况,并会产生未来的问题。

另一个提示,永远不要将文件内容存储在数据库中,其成本远远高于存储该文件的路径。

答案 2 :(得分:0)

将图像存储在数据库中并不是一个好主意,而是将链接存储到数据库中的图像。 例如; 创建一个包含以下字段的表

  • image_id //图片的唯一ID
  • image_type //图片类型(“png”,“jpg”,“gif”.....)
  • image_link //图片所在文件夹的路径
  • 上传日期//上传图片的日期(对于数据库查询中的排序很有用)

您可以添加任何其他您想要的字段