15

我正在建立一个网站,该网站正在查看数百万张轻松上传的照片(每张上传的图像都有 3 个缩略图),我需要找到存储所有这些图像的最佳方法。

我已经搜索并找到了存储为哈希的图像示例......例如......

如果我上传coolparty.jpg,我的脚本会将其转换为Md5 哈希,从而导致......

dcehwd8y4fcf42wduasdha.jpg

并且存储在其中,/dc/eh/wd/dcehwd8y4fcf42wduasdha.jpg 但是对于 3 个缩略图,我不知道如何存储它们

问题..

  1. 这是存储这些图像的正确方法吗?

  2. 我将如何存储缩略图?

  3. 在 PHP 中,使用上述方法存储这些图像的示例代码是什么?

4

5 回答 5

11

我如何使用文件夹结构:

  • 我正在上传照片,然后像你说的那样移动它:

    $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 个字符。

于 2012-09-04T04:39:29.820 回答
7

您使用这样的方法的原因只是为了减少每个目录(inode)的文件总数。

使用您描述的方法(3 级深度),您几乎不可能达到每个目录甚至数百个图像,因为您将拥有近 17MM 的最大目录数。16**6。

至于你的问题。

  1. 是的,这是存储它们的好方法。
  2. 我会这样做的方式是

    /aa/bb/cc/aabbccdddddddddddddd_thumb.jpg
    /aa/bb/cc/aabbccdddddddddddddd_large.jpg
    /aa/bb/cc/aabbccdddddddddddddd_full.jpg

    或类似的

  3. 至于如何实际存储图像,网上有很多例子。你有更具体的问题吗?
于 2012-09-04T04:41:00.030 回答
2

如果您谈论的是数百万张照片,我建议您将这些照片提供给第三方,例如 Amazon Web Services,更具体地说是针对此 Amazon S3。文件数量没有限制,假设您不需要实际列出文件,则根本不需要将它们分隔到目录中(如果您确实需要列出,您可以使用不同的分隔符和前缀- http://docs.amazonwebservices.com/AmazonS3/latest/dev/ListingKeysHierarchy.html)。并且您的托管/rereival 成本可能会比自己做的要低 - 而且它们会得到备份。

更具体地说,是的,按子目录拆分;使用您的结构,您可以删除文件名的前 5 个字符,因为您已经在目录名称中拥有它。

正如阿奎那所建议的那样,拇指只是将 _thumb1 等附加到文件名。或者将它们存储在单独的文件夹中。

于 2012-09-04T04:41:16.293 回答
-3

1) 那是只有你能回答的问题。一般来说,我更喜欢将图像存储在数据库中,这样您就可以拥有一个一致的备份,但 YMMV。

2)如何?/dc/eh/wd/dcehwd8y4fcf42wduasdha_thumb1.jpg、/dc/eh/wd/dcehwd8y4fcf42wduasdha_thumb2.jpg 和 /dc/eh/wd/dcehwd8y4fcf42wduasdha_thumb3.jpg 怎么样

3)???您是在问如何将文件写入文件系统还是...?

于 2012-09-04T04:34:27.073 回答
-3

改进答案。

对于数以百万计的图像,是的,使用数据库会减慢进程是正确的

最好的选择是使用“服务器文件系统”来存储图像并使用 .htaccess 来增加安全性。

或者您可以使用网络服务。许多服务器都提供Images Api 用于上传、显示。您也可以继续该选项。例如亚马逊

于 2012-09-04T04:41:20.780 回答