我正在建立一个网站,正在查看上传的数百万张照片(上传的每张图片各有3张缩略图),我需要找到存储所有这些图片的最佳方法。
我搜索并找到了存储为哈希的图像示例....例如......
如果我上传,coolparty.jpg,我的脚本会将其转换为Md5哈希导致..
dcehwd8y4fcf42wduasdha.jpg
并存储在/dc/eh/wd/dcehwd8y4fcf42wduasdha.jpg
但对于3个缩略图,我不知道如何存储它们
问题..
这是存储这些图像的正确方法吗?
我如何存储缩略图?
在PHP中,使用上述方法存储这些图像的示例代码是什么?
答案 0 :(得分:10)
我如何使用文件夹结构:
我正在上传照片,并像你说的那样移动照片:
$image = md5_file($_FILES['image']['tmp_name']);
// you can add a random number to the file name just to make sure your images will be "unique"
$image = md5(mt_rand().$image);
$folder = $image[0]."/".$image[1]."/".$image[2]."/";
// IMAGES_PATH is a constant stored in my global config
define('IMAGES_PATH', '/path/to/my/images/');
// coolparty = f3d40fc20a86e4bf8ab717a6166a02d4
$folder = IMAGES_PATH.$folder.'f3d40fc20a86e4bf8ab717a6166a02d4.jpg';
// thumbnail, I just append the t_ before image name
$folder = IMAGES_PATH.$folder.'t_f3d40fc20a86e4bf8ab717a6166a02d4.jpg';
// move_uploaded_file(), with thumbnail after process
// also make sure you create the folders in mkdir() before you move them
我相信是基本的方式,当然你可以将文件夹结构更改为更深的文件夹,就像你说的那样,如果你有数百万张图片就会有2个字符。
答案 1 :(得分:7)
您使用这样的方法的原因只是减少每个目录(inode)的文件总数。
使用您描述的方法(3级深度),您每个目录甚至不可能达到数百个图像,因为您的目录最多可达17MM。 16 ** 6。
至于你的问题。
我会采用的方式是
/aa/bb/cc/aabbccdddddddddddddd_thumb.jpg
/aa/bb/cc/aabbccdddddddddddddd_large.jpg
/aa/bb/cc/aabbccdddddddddddddddddddd_did.jpg
或类似的
答案 2 :(得分:2)
如果您正在谈论数百万张照片,我建议您将这些照片发送给第三方,例如Amazon Web Services,更具体地说是针对此Amazon S3。文件数量没有限制,假设您不需要实际列出文件,则根本不需要将它们分成目录(如果您确实需要列出,则可以使用不同的分隔符和前缀 - http://docs.amazonwebservices.com/AmazonS3/latest/dev/ListingKeysHierarchy.html)。而你的托管/重建成本可能会低于自己 - 并且他们会得到备份。
更具体地回答,是的,按子目录拆分;使用您的结构,您可以删除文件名的前5个字符,因为您已经在目录名称中使用它。
正如aquinas所建议的那样,拇指只是在文件名中添加了_thumb1等。或者将它们存储在单独的文件夹中。
答案 3 :(得分:-3)
1)这是你能回答的问题。通常,我更喜欢将图像存储在数据库中,因此您可以拥有一个一致的备份,但是YMMV。
2)怎么样?怎么样/dc/eh/wd/dcehwd8y4fcf42wduasdha_thumb1.jpg,/dc/eh/wd/dcehwd8y4fcf42wduasdha_thumb2.jpg和/dc/eh/wd/dcehwd8y4fcf42wduasdha_thumb3.jpg
3)???您是否在询问如何将文件写入文件系统或...?
答案 4 :(得分:-3)
改善答案。
对于数百万张图片,同样如此,使用数据库会减慢过程的速度是正确的
最好的选择是使用“服务器文件系统”来存储图像,并使用.htaccess来增加安全性。
或者您可以使用网络服务。很多服务器都提供Images Api来上传,显示。 你也可以选择这个选项。例如亚马逊