我确定这个问题已经被问了好几千次,所以这里是我的版本......
我有一张上传图片的表单... 每张图片都包含一个唯一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个数字来做正确的方法吗?是否有更好的方法来均匀归档图像?
由于
答案 0 :(得分:1)
假设唯一的id是统一的(psuedo)随机的,我认为它是这样的,我认为这个策略会很好用。根据{{3}}预测,不可避免地会有一些文件夹的平均值比平均值多很多或多少。
稍微更好的“分箱”图像技术是使用uid中许多数字的模数(%),而不是使用最后两位数字,以防你挑选的数字有某种模式。 / p>
我的建议是试一试,看看它对你有用。理想情况下,您可以创建一个“测试工具”来调用算法数十万次,之后您可以评估目录结构中的文件分发是否适合您的目的。