在浏览我们自己的项目时,其他开发人员使用rand()在上传图像文件时为其提供随机名称。
我的建议是使用rand(100,999)来获得更多感知的文件名。你推荐哪一个?它是一个低流量的网站,所以我相信碰撞的风险非常低。
答案 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));