将图像均匀上传到目录结构中

时间:2012-03-25 04:25:09

标签: php

我确定这个问题已经被问了好几千次,所以这里是我的版本......

我有一张上传图片的表单... 每张图片都包含一个唯一ID。我使用以下函数生成我的unid id:

function generateUnid($key) {   
    $name = $_FILES[$key]['name']; //get image name from global variable $_FILES
    $ext = pathinfo($name, PATHINFO_EXTENSION); //get image extension
    $prefix = 'fc'; //prefix for unid

    do {
       $unid = uniqid($prefix, true); //generate a unid
       $filename = $unid . '.' . $ext; //replace image name with unid
       $path = PATH_UPLOAD_ARTWORK . $filename; // image path
    } while (file_exists($path)); // check if the image name exists

    return $filename;
}

返回值的示例是:

fc4e7801523a04e6.06876802.jpg

到目前为止一切顺利。现在,我想为我的图像创建某种目录结构。类似的东西:

0
   0
   1
   2
      fc4e7801523a04e6.06876802.jpg
      ...
   3
   ...
1
  0
  1
  2
  3
  ...
2
  0
  1
  ...

我可能会在我的唯一ID中获取最后2个整数,用于在正确的目录中归档图像。但是,我不确定这是否是正确的策略...... 如何确保图像均匀地存储在文件夹中。我不想找到一个包含12 000个图像的文件夹和一个包含1 500个图像的文件夹...

我是通过提取我的uniq的最后2个数字来做正确的方法吗?是否有更好的方法来均匀归档图像?

由于

1 个答案:

答案 0 :(得分:1)

假设唯一的id是统一的(psuedo)随机的,我认为它是这样的,我认为这个策略会很好用。根据{{​​3}}预测,不可避免地会有一些文件夹的平均值比平均值多很多或多少。

稍微更好的“分箱”图像技术是使用uid中许多数字的模数(%),而不是使用最后两位数字,以防你挑选的数字有某种模式。 / p>

我的建议是试一试,看看它对你有用。理想情况下,您可以创建一个“测试工具”来调用算法数十万次,之后您可以评估目录结构中的文件分发是否适合您的目的。