处理图像上传(跟踪)PHP

时间:2011-02-28 00:07:35

标签: php mysql database image codeigniter

在我的网站中,我会让用户上传产品图片,每个产品图片都会有不同大小的不同版本。您如何建议我跟踪所有这些图像,以便轻松处理插入和删除?

我现在编码的系统基本上在上传时记录数据库中的图像数据(路径,大小,日期等)。图像文件名由

生成
md5( microtime() ) . $this->auth->user_id;
// 55bedba35a57c710e73fee21106006b71

和这样的路径:

'./img/'.substr($file_name,0,1).'/'.substr($file_name,1,1).'/'.substr($file_name,2,1);
// /img/5/5/b

所以

// /img/5/5/b/55bedba35a57c710e73fee21106006b71.jpg

这是针对每个“图像”(原始图像)。我还不确定如何录制版本。

事情是我对完整性有点偏执所以想到某些图像被删除但仍然有记录或没有记录的图像困扰我。

是否有任何东西(图书馆或其他东西)可以帮助我连接数据库 - 文件系统的空白?

如果有任何帮助,我正在使用CodeIgniter

提前致谢。如果我没有任何意义,请告诉我。嘿。

修改

我正在考虑将原始数据作为blob存储在数据库中,然后生成变体并将它们全部放在同一个文件夹中。这样我认为在丢失图像的情况下重新生成所有图像可能更容易,并在必要时删除文件夹以删除所有文件。这可能会让我的数据库大小无法忍受吗?你觉得怎么样?

1 个答案:

答案 0 :(得分:0)

如果您计划将图像存储到数据库中,这实际上取决于图像的数量和大小。我编写了电子商务系统,可以从各种大小的MySQL数据库中提供数千张图像,除了系统负载外没有问题。

将图像存储在数据库中的缺点是每个图像都需要执行PHP脚本来提供服务,从而增加了数据库服务器和Web服务器的负载。

我建议您使用哈希来命名文件,例如md5或sha1,并在其前面添加user_id,将哈希值存储到数据库中。

$filename = md5_file($filename) . $extension;

对于版本,我会在数据库中有一个表,其中包含四列+您希望存储的任何额外元数据。

示例:

image_id | parent_image_id | user_id | hash
-------------------------------------------------------
1        | NULL            | 1       | AAAAAAAAAAAAAAAA
2        | 1               | 1       | BBBBBBBBBBBBBBBB
3        | 2               | 1       | CCCCCCCCCCCCCCCC

如果您愿意,可以有多个子版本,从任何版本扩展出来。

对于文件系统,为了提高性能,您应该将文件存储在存储桶结构中...如果您使用哈希方法,则可以执行以下操作...

假设文件名为“aabbccddeeff.jpg”,您可以将文件存储到文件夹中,如下所示:

图像/ AA / BB /立方厘米/ DD / eeff.jpg

如果您要拥有数千个图像文件,这一点尤其重要。