哪个更好?兰德()或兰德(100,999)?

时间:2011-05-05 07:39:54

标签: php random

在浏览我们自己的项目时,其他开发人员使用rand()在上传图像文件时为其提供随机名称。

我的建议是使用rand(100,999)来获得更多感知的文件名。你推荐哪一个?它是一个低流量的网站,所以我相信碰撞的风险非常低。

4 个答案:

答案 0 :(得分:6)

使用tempnam http://at2.php.net/manual/de/function.tempnam.php安全地获取文件名。提供前缀以便在FTP客户端,资源管理器中更好地识别这些文件。

答案 1 :(得分:6)

几乎完全安全的解决方案是使用您想要的任何方法(uniqid()time()肯定是最好的方法),但查看文件是否已存在 。如果它已存在,请使用其他名称,或向其添加(1)之类的内容。重复,直到找到可用的文件名。

理论上,如果两个用户在同一时间上传并且恰好生成完全相同的ID,那么理论上并不完全是碰撞安全的,但这里发生碰撞的风险是微观的。

如果您希望文件名有意义,请考虑使用您拥有的任何实际数据,并在其后面添加随机ID:

user500_picture1_1238273193173294323191.jpg

如果要向使用空格或变音符号的文件名添加信息,使用urlencode()是一种很好的技巧,可以将任何类型的字符串转换为所有文件系统上的有效文件名。

答案 2 :(得分:1)

使用uniqid功能或任何其他方式获得真正独特的价值。如果使用rand()冲突(冲突)是不可避免的。

答案 3 :(得分:1)

do {
  $filename = '/yourpath/' . time() . '_' . rand(100,999) . '.jpg';
  }
while (file_exists($filename));