帝国cms7.5中,上传文件的命名,由函数控制,该函数:
//函数returndotranfilename位于文件/e/class/connect.php#//返回上传文件名中。 //返回上传文件名 function ReturnDoTranFilename($file_name,$classid){ $filename=md5(uniqid(microtime()).EcmsRandInt()); return $filename; }
可见是用的系统的毫秒级别时间+随机数,然后md5函数,出来是32位的字符串。
帝国cms论坛看到,有这样的需求:
比如变成 userid_20220122131415.jpg 这样会员ID+上传日期的名字呢?
可以这样:
//返回上传文件名 function ReturnDoTranFilename($file_name,$classid){ //$filename=md5(uniqid(microtime()).EcmsRandInt()); $userid=getcvar('loginuserid',1); if(!$userid)$userid=getcvar('mluserid'); if(!$userid)$userid='0'; $filename=$userid."_".date('YmdHis'); return $filename; }
这样修改后能满足需求,但是如果某个会员大量的并发上传文件,可能带来重名问题。