Thinkphp上传图片重复问题

    我的php开发经验快要2年了,成长速度还很慢吧,毕竟自己比较懒,很感激ThinkPHP团队的不断更新和努力完善TP框架,并坚持开源和免费提供使用,帮助我们这些开发人员更加方便的进行WEB应用的快速开发。这款简单却实用、轻量级却功能强大的框架,是我在开发项目中的重要支柱了。

    现在说说今天在使用ThinkPHP中遇到的难题

    小弟在开发一个后台管理的项目,需要多文件上传,结果: 上传图片出现重复问题,而且重复的很无规律;比如;图片1与图片2重复,图片3,图片4与图片5重复。。。。。没一点规律,顿时懵哔了。

     网上搜了搜,看了下上传方法 upload()

private $config = array(
        'mimes'         =>  array(), //允许上传的文件MiMe类型
        'maxSize'       =>  0, //上传的文件大小限制 (0-不做限制)
        'exts'          =>  array(), //允许上传的文件后缀
        'autoSub'       =>  true, //自动子目录保存文件
        'subName'       =>  array('date', 'Y-m-d'), //子目录创建方式,[0]-函数名,[1]-参数,多个参数使用数组
        'rootPath'      =>  './Uploads/', //保存根路径
        'savePath'      =>  '', //保存路径
        'saveName'      =>  array('uniqid', ''), //上传文件命名规则,[0]-函数名,[1]-参数,多个参数使用数组
        'saveExt'       =>  '', //文件保存后缀,空则使用原后缀
        'replace'       =>  false, //存在同名是否覆盖
        'hash'          =>  true, //是否生成hash编码
        'callback'      =>  false, //检测文件是否存在回调,如果存在返回文件信息数组
        'driver'        =>  '', // 文件上传驱动
        'driverConfig'  =>  array(), // 上传驱动配置
    );

配置项saveName清楚写到默认话按照uniqid方法命名,按照度娘的说法我需要在配置项重新修改配置:

    $now = $_SERVER['REQUEST_TIME'];
    $upload->saveName = array('uniqid',$now);//上传文件的保存规则

我草!!!!这样不对呐,

/**
     * 根据指定的规则获取文件或目录名称
     * @param  array  $rule     规则
     * @param  string $filename 原文件名
     * @return string           文件或目录名称
     */
    private function getName($rule, $filename){
        $name = '';
        if(is_array($rule)){ //数组规则
            $func     = $rule[0];
            $param    = (array)$rule[1];
            foreach ($param as &$value) {
               $value = str_replace('__FILE__', $filename, $value);
            }
            $name = call_user_func_array($func, $param);
        } elseif (is_string($rule)){ //字符串规则
            if(function_exists($rule)){
                $name = call_user_func($rule);
            } else {
                $name = $rule;
            }
        }
        return $name;
    }

分析了后感觉没毛病,这句代码看脸?

后来群里一哥们也遇到这个问题,人家这样写的:

$upload->saveName = array('uniqid', array('', true));

我把之前项目试了试。。。。成了。

我就私聊那哥们用用我之前的方法

    $now = $_SERVER['REQUEST_TIME'];
    $upload->saveName = array('uniqid',$now);//上传文件的保存规则

看他行不行, 事实证明这个方法不稳定,那哥们也是可以的。

。。。。。。。。

总结:Thinkphp如果遇到多图上传重复,我选择

$upload->saveName = array('uniqid', array('', true));

 

转载于:https://my.oschina.net/sunYwp/blog/871426

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值