PHP8.1.21版本已发布
vue8.1.21版本已发布
jquery8.1.21版本已发布

关于上传的saveRule

原创
2016-06-07 11:42:26 746浏览

关于在http://www.thinkphp.cn/info/194.html中看到的"上传文件的命名规范"不是很明白,是关于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 //用户是否使用自定义函数 这是自己添加的方法:/**
* 存放用户自定义函数定义
*@param null
*@return Array(functionName,param)
*Add on 2014-03-15 By funInCorner(xiaofosong@126.com)
* **/
private function __isfExists(){
//返回的数组(函数名称,函数参数)
$re_arr = array("functionName"=>"","param"=>"");
$param2 = "";
//将用户的传递的saveRule赋值给$functionName
$functionName = $saveRule = $this->saveRule;
//$this->userFunction是用来判断用户是否用用户自定义函数
if(strpos($saveRule, "(" ) != false && $this->userFunction){
//获取开始位置
$startLeft = strpos($saveRule, "(" );
//参数字符串
$param2 = substr($functionName,$startLeft + 1,strlen($functionName) - ($startLeft + 2) );
//函数名称
$functionName = substr($functionName,0,strpos($saveRule, "(" ));
$re_arr['functionName'] = $functionName;
$re_arr['param'] = $param2;
}else{
$re_arr['functionName'] = $this->saveRule;
}

/**
*下面的方法需要手动加的
*用户自定义函数的返回值务必是string
*返回的string,将作为不带扩展名的文件名称(如:helloWorld)
*范例配置:$upload->saveRule = 'datetime(10)';
*或者是:$upload->saveRule = 'datetime()';
**/
if($param2){
//当用户自定义的函数有参数时
if(!function_exists($functionName)){
//只是范例方法,可以删除
function datetime($param2){
return $param2.date('YmdHis').rand(0,10);
};
}
}else{
//当用户自定义的函数没有参数时
if(!function_exists($functionName)){
//只是范例方法,可以删除
function datetime(){
return date('YmdHis').rand(0, 10);
};
}
}
return $re_arr;
}
修改了getSaveName方法 //修改之后的getSaveName函数
private function getSaveName($filename) {
$re_arr = $this->__isfexists();//调用一下检查函数
$rule = $re_arr['functionName'];
$parma = $re_arr['param'];
if(empty($rule)) {//没有定义命名规则,则保持文件名不变
$saveName = $filename['name'];
}else {
if($parma != ""){
if(function_exists($rule)) {
//根据用户自定义的函数的string做文件名称
$saveName = $rule($parma);
}
}else{
if(function_exists($rule) ){
//使用函数生成一个唯一文件标识号
$saveName = $rule();
}else {
//使用给定的文件名作为标识号
$saveName = $rule;
}
}
//最后保存名称和文件扩展名用"."连接
$saveName .= ".".$filename['extension'];
}
if($this->autoSub) {
// 使用子目录保存文件
$filename['savename'] = $saveName;
$saveName = $this->getSubName($filename).$saveName;
}
return $saveName;
}

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

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

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。