微构网络

thinkphp5存在多图上传却返回同一张图片的bug

2017-06-02 09:50 栏目:技术教程 查看(565)

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行开始。

因此要解决这个问题,得把这个粒度再细化,比如最简单的就是在后面再加一个随机数,这样就可以避免多个文件重名了。

转载请注明出处:thinkphp5存在多图上传却返回同一张图片的bug - 微构网络
分享:

您可能遇到的问题?

搜索微构网络的干货:

值班:15574303608 业务:在线咨询 技术:在线咨询

电话:0731-83862683 售后:在线咨询 邮箱:server@csweigou.com

地址:长沙市五一西路锦绣中环1116(五一广场平和堂对面)