thinkphp5存在多图上传却返回同一张图片的bug
thinkPHP是为了简化企业级应用开发和敏捷WEB应用开发的php国产开发框架,在国内使用的用户还算比较多,特别适合中小型项目的敏捷开发。而且这个框架除了核心功能外,还扩展了很多日常可能需要使用到的php类库,比如验证码、图片处理等等。
在最近使用tp5开发一个项目过程中就遇到了一个tp5的坑,那就是多图上传(其实就是多文件上传),利用官方提供的file类,发现很多时候出现上传多张图片返回的结果却是一样的。比如说1、2、3三种图片,我们应该要得到的是a、b、c三个不同的图片路径,但是事实却是经常出现返回a、a、a的结果,也就是返回的结果重复了。
结果我们通过分析tp自带的file类发现原来是这个类的buildSaveName(获取保存文件名)方法的问题,在这个方法中有date(‘Ymd’) . DS . md5(microtime(true),也就是同一批文件命名是以微秒来标识的,虽然微秒已经算很小的单位了,但事实证明重复的概率不低。
这个方法位于thinkphp\library\think\File.php文件中,大概在348行开始。
因此要解决这个问题,得把这个粒度再细化,比如最简单的就是在后面再加一个随机数,这样就可以避免多个文件重名了。