处理图像上传(跟踪)PHP

处理图像上传(跟踪)PHP,php,mysql,database,image,codeigniter,Php,Mysql,Database,Image,Codeigniter,在我的网站上,我会让用户上传产品图片,每个产品图片都会有不同大小的不同版本。您建议我如何跟踪所有这些图像,以便轻松处理插入和删除 我目前编写的系统基本上在上传时将图像数据(路径、大小、日期等)记录在DB行中。图像文件名由 md5( microtime() ) . $this->auth->user_id; // 55bedba35a57c710e73fee21106006b71 还有这样的路径: './img/'.substr($file_name,0,1).'/'.substr(

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

我目前编写的系统基本上在上传时将图像数据(路径、大小、日期等)记录在DB行中。图像文件名由

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存储在数据库中,然后生成变体并将它们全部放在同一个文件夹中。这样,我认为在丢失图像的情况下重新生成所有图像可能会更容易,并在必要时删除文件夹以删除所有文件。这可能会让我的数据库无法忍受不?你认为呢?

如果你打算将图像存储到数据库中,这实际上取决于图像的数量和大小。我已经编写了电子商务系统,它可以从不同大小的MySQL数据库中提供数千张图像,除了系统上的负载外,没有任何问题

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

我建议您使用散列来命名文件,如md5或sha1,并在其前面加上用户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
然后,如果您愿意,您可以有多个子版本,从任何版本分支出来

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

假设文件名为“aabbccddeeff.jpg”,则将文件存储到如下文件夹中:

image/aa/bb/cc/dd/eeff.jpg


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

根据图像的大小,您可以将它们作为一个blob直接存储在数据库中?这样,您只有一个中心存储点。不过你可以很快变大