2012-10-25 130 views
2

从一个项目遇到困难时组织静态存储大量文件。对于图像,创建一个表格Image并且有一个记录来计算存储路径。 像这样:本地文件存储

代码:

$ image_id = 1665765; 
$ paddedId = str_pad ($ image_id, 20, '0 ', STR_PAD_LEFT); 
$ path = '/'. implode (DIRECTORY_SEPARATOR, str_split ($ paddedId, 2)); 

在输出:==> webroor.upload/00/00/00/00/00/00/01/66/57 /1665765分之65。 jpg

$ image_id是需要图片的实体表中的一个字段($ user-> image_id)。这种方法允许基于一个$ image_id指定图像的完整路径而无需调用基础。当我们明显知道文件的格式时(在这种情况下,总是.jpg),它起作用。 但有时需要用户下载不同格式的图像。而这种方法是不实际的,因为必须让精神和加入文件(图像)表,以id文件并计算其扩展路径。由于表格图像可能很大(甚至在单独的数据库中)会降低系统性能。 请与我们分享您的食谱在存储。也许有人有一个想法如何做得更好。

对不起,我的英语。

回答

1

有两种方法。

首先 - 您应该优化您的架构以存储数据库中所有文件的完整路径。但现有项目中有大量内容并不容易。 第二个 - 您已将所有上传的文件转换为一个特定的扩展名,例如.jpg,并且您所有的麻烦都将消失。许多高负荷社交网络使用这种解决方案。

+0

该网站可以是gif和jpg图像。转换为单一格式(jpg)是不可能的。 – Miron

+0

在这种情况下,您可以将image_id字段更改为字符串并在其中保存完整路径。或者它也不可能? – Hast

+0

哦,也。如果image_id是唯一的,您可以为该文件的每个扩展名尝试file_exists,并检测该文件夹中存在哪个扩展名。但这是最后的手段。 – Hast