Rumah  >  Artikel  >  php教程  >  关于上传的saveRule

关于上传的saveRule

WBOY
WBOYasal
2016-06-07 11:42:26974semak imbas

关于在http://www.thinkphp.cn/info/194.html中看到的"上传文件的命名规范"不是很明白,是关于saveRule的用户自定义函数,所以自己尝试添加了一些代码,不对的地方,还请大家指出!!
这是我的上传图片的配置代码:
关于上传的saveRule
这是效果图:
关于上传的saveRule
1假如你的项目中使用上传文件的方法比较少的话,你可以不修改代码的,
直接设置上传文件名(参考来自:http://www.thinkphp.cn/info/194.html)$upload->saveRule = time().'_'.mt_rand();2.修改Upload.class.php文件,适合多处上传需要用到用户自定义函数
修改的文件是:Upload.class.php(Thinkphp的文件上传文件类)
我在class中添加了一个方法:
类中的$config数组中添加了一个元素:'userFunction'      =>  false      //用户是否使用自定义函数 这是自己添加的方法:/**<br>      * 存放用户自定义函数定义<br>      *@param null<br>      *@return Array(functionName,param)<br>      *Add on 2014-03-15 By funInCorner(xiaofosong@126.com)<br>      * **/<br>     private function __isfExists(){<br>         //返回的数组(函数名称,函数参数)<br>         $re_arr = array("functionName"=>"","param"=>"");<br>         $param2 = "";<br>         //将用户的传递的saveRule赋值给$functionName<br>         $functionName = $saveRule = $this->saveRule;<br>         //$this->userFunction是用来判断用户是否用用户自定义函数<br>         if(strpos($saveRule, "(" ) != false && $this->userFunction){<br>             //获取开始位置<br>             $startLeft = strpos($saveRule, "(" );<br>             //参数字符串 <br>             $param2 = substr($functionName,$startLeft + 1,strlen($functionName) - ($startLeft + 2) );   <br>             //函数名称<br>             $functionName = substr($functionName,0,strpos($saveRule, "(" ));<br>             $re_arr['functionName'] = $functionName;<br>             $re_arr['param'] = $param2;   <br>         }else{<br>             $re_arr['functionName'] = $this->saveRule;<br>         }<br> <br>         /**<br>         *下面的方法需要手动加的<br>         *用户自定义函数的返回值务必是string<br>         *返回的string,将作为不带扩展名的文件名称(如:helloWorld)<br>         *范例配置:$upload->saveRule = 'datetime(10)';<br>         *或者是:$upload->saveRule = 'datetime()';<br>         **/<br>         if($param2){<br>             //当用户自定义的函数有参数时<br>             if(!function_exists($functionName)){<br>                 //只是范例方法,可以删除<br>                 function datetime($param2){<br>                     return $param2.date('YmdHis').rand(0,10);<br>                 };<br>             }   <br>         }else{<br>             //当用户自定义的函数没有参数时<br>             if(!function_exists($functionName)){<br>                 //只是范例方法,可以删除<br>                 function datetime(){<br>                     return date('YmdHis').rand(0, 10);<br>                 };<br>             }   <br>         }<br>         return $re_arr;<br>     }修改了getSaveName方法 //修改之后的getSaveName函数<br>     private function getSaveName($filename) {<br>         $re_arr = $this->__isfexists();//调用一下检查函数<br>         $rule = $re_arr['functionName'];<br>         $parma = $re_arr['param']; <br>         if(empty($rule)) {//没有定义命名规则,则保持文件名不变<br>             $saveName = $filename['name'];<br>         }else {<br>             if($parma != ""){<br>                  if(function_exists($rule)) {<br>                     //根据用户自定义的函数的string做文件名称<br>                     $saveName = $rule($parma);<br>                 }<br>             }else{<br>                 if(function_exists($rule) ){<br>                     //使用函数生成一个唯一文件标识号<br>                     $saveName = $rule();<br>                 }else {<br>                     //使用给定的文件名作为标识号<br>                     $saveName = $rule;<br>                 }<br>             }<br>             //最后保存名称和文件扩展名用"."连接<br>             $saveName .= ".".$filename['extension'];<br>         }<br>         if($this->autoSub) {<br>             // 使用子目录保存文件<br>             $filename['savename'] = $saveName;<br>             $saveName = $this->getSubName($filename).$saveName;<br>         }<br>         return $saveName;<br>     }

附件 UploadFile.class.zip ( 5.22 KB 下载:34 次 )

AD:真正免费,域名+虚机+企业邮箱=0元

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn