//********************** Check 区/**+-----------------------------------------------
函 数 名: Check_File
功能描述: 检查文件的合法性
函数说明: 直接调用
调用函数: Check_File()
参数:
设 计 者: ggg 日期: 2004-9-1 7:06
修 改 者: ggg 日期: 2004-9-1 7:06
版 本: 1.0
**+-----------------------------------------------
*/function Check_File()
{
$file_tmp_name=$this->Get_FileTmpName(); //得到临时文件名
$file_name=$this->Get_FileName(); //得到文件名
$file_size=$this->Get_FileSize(); //得到文件大小
$file_up_size=$this->Get_FileUpSize(); //得到文件大小
//检查上传的文件是否存在
if(empty($file_tmp_name) || $file_tmp_name=="none" || !file_exists($file_tmp_name))//没选择要上传的文件,返回
{
$this->mStrErr="上传的文件不存在!";
$this->Show_Debug();
return false;
}
if(!is_writeable($this->Get_FileUpPath())) //如果上传至的目录可写
{
$this->mStrErr="上传文件目录:".$this->Get_FileUpPath()." 不可写,请先更改目录属性!";
$this->Show_Debug();
return false;
} //验证上传文件的文件名的合法性
if($file_size>$file_up_size) //换成小写
{
$this->mStrErr="上传文件允许的最大尺寸为".$file_up_size."字节!!";
$this->Show_Debug();
return false;
} //验证上传文件的文件名的合法性
if($this->mIsFileLower) //换成小写
$file_name=$this->MyStrTolower($file_name); //得到文件名与扩展名
$file_name_name=trim($this->Get_Str_Head($file_name,'.'));
$file_name_ext="";//trim($this->Get_Str_End($file_name,'.'));
if($this->mIsFileRight) //如果要保证文件名只能由字母,数字,上下划线,点号组成
{
if(!ereg("^[0-9a-z\._\-]+$",$file_name_ext))//看扩展名的合法性
{
$this->mStrErr="上传的扩展名:".$file_name_ext." 不符合标准,已去除扩展名";
$file_name_ext=""; //这里的处理是直接删除扩展名
}
if(!ereg("^[0-9a-z\._\-]+$",$file_name_name)) //看文件名的合法性
{
srand((double)microtime()*1000000);
$this->mStrErr="上传的文件名:".$file_name_name." 不符合标准";
$file_name_name=rand(1,999).$this->mErrorFile;
$this->mStrErr.=",已改成:".$file_name_name."!";
}
$file_name=$file_name_name.$file_name_ext; //重新得到新的文件名
} //文件名过长处理
if(strlen($file_name)>$this->mMaxFileNameLen) //文件名过长
{
if(strlen($file_name_ext)>$this->mMaxFileNameLen) //如果扩展名大于所允许的最长字符 可能性很小
{
$this->mStrErr.="扩展名长度大于:".$this->mMaxFileNameLen." !";
$file_name_ext=substr($file_name_name,0,5);
}
if(strlen($file_name_name)>$this->mMaxFileNameLen) //如果文件名大于所允许的最长字符,也进行截取
{ //文件名的长度是根据 总长度 减 扩展名长度得到
$this->mStrErr.="文件名长度大于:".$this->mMaxFileNameLen." !";
$file_name_name=substr($file_name_name,0,$this->mMaxFileNameLen-strlen($file_name_ext));
}
} //对扩展名进行过滤检查
while(list($k, $v) = each($this->ExtFilter))
{
if(strstr($file_name_ext,$k)) //扩展名包含了关键字了
{
$this->mStrErr.="扩展名包含了关键字了:".$v." !";
$file_name_ext=str_replace($v,$k,$file_name_ext);
}
}
$file_name=$file_name_name.$file_name_ext;//[如果加了这个变量“$file_name_ext”,则上传后的文件将会多出一个扩展名] //重新得到新的文件名 //看将要上传的文件是不是已存在了,修改文件名
if(file_exists($this->Get_FileUpPath().$file_name))
{
$this->mStrErr.="要上传的文件名已存在:".$this->Get_FileUpPath().$file_name." !";
$file_name_name=substr($file_name_name,0,$this->mMaxFileNameLen);//为防止连续重复后文件名变得过长,在此截除
$count_i=0;
while(file_exists($this->Get_FileUpPath().$file_name_name.$count_i.$file_name_ext))$count_i++;//a1 a2 a3
$file_name=$file_name_name.$count_i.$file_name_ext; //重新得到新的文件名
} //此时已得到最终的文件名
$this->Set_FileName($file_name); //重新设置类成员变量的文件名称
//验证文件类型是否正确
if(false==$this->Check_FileUpType())
{
return false;
}
$this->Show_Debug();
return !false;
}//END Check_File
函 数 名: Check_File
功能描述: 检查文件的合法性
函数说明: 直接调用
调用函数: Check_File()
参数:
设 计 者: ggg 日期: 2004-9-1 7:06
修 改 者: ggg 日期: 2004-9-1 7:06
版 本: 1.0
**+-----------------------------------------------
*/function Check_File()
{
$file_tmp_name=$this->Get_FileTmpName(); //得到临时文件名
$file_name=$this->Get_FileName(); //得到文件名
$file_size=$this->Get_FileSize(); //得到文件大小
$file_up_size=$this->Get_FileUpSize(); //得到文件大小
//检查上传的文件是否存在
if(empty($file_tmp_name) || $file_tmp_name=="none" || !file_exists($file_tmp_name))//没选择要上传的文件,返回
{
$this->mStrErr="上传的文件不存在!";
$this->Show_Debug();
return false;
}
if(!is_writeable($this->Get_FileUpPath())) //如果上传至的目录可写
{
$this->mStrErr="上传文件目录:".$this->Get_FileUpPath()." 不可写,请先更改目录属性!";
$this->Show_Debug();
return false;
} //验证上传文件的文件名的合法性
if($file_size>$file_up_size) //换成小写
{
$this->mStrErr="上传文件允许的最大尺寸为".$file_up_size."字节!!";
$this->Show_Debug();
return false;
} //验证上传文件的文件名的合法性
if($this->mIsFileLower) //换成小写
$file_name=$this->MyStrTolower($file_name); //得到文件名与扩展名
$file_name_name=trim($this->Get_Str_Head($file_name,'.'));
$file_name_ext="";//trim($this->Get_Str_End($file_name,'.'));
if($this->mIsFileRight) //如果要保证文件名只能由字母,数字,上下划线,点号组成
{
if(!ereg("^[0-9a-z\._\-]+$",$file_name_ext))//看扩展名的合法性
{
$this->mStrErr="上传的扩展名:".$file_name_ext." 不符合标准,已去除扩展名";
$file_name_ext=""; //这里的处理是直接删除扩展名
}
if(!ereg("^[0-9a-z\._\-]+$",$file_name_name)) //看文件名的合法性
{
srand((double)microtime()*1000000);
$this->mStrErr="上传的文件名:".$file_name_name." 不符合标准";
$file_name_name=rand(1,999).$this->mErrorFile;
$this->mStrErr.=",已改成:".$file_name_name."!";
}
$file_name=$file_name_name.$file_name_ext; //重新得到新的文件名
} //文件名过长处理
if(strlen($file_name)>$this->mMaxFileNameLen) //文件名过长
{
if(strlen($file_name_ext)>$this->mMaxFileNameLen) //如果扩展名大于所允许的最长字符 可能性很小
{
$this->mStrErr.="扩展名长度大于:".$this->mMaxFileNameLen." !";
$file_name_ext=substr($file_name_name,0,5);
}
if(strlen($file_name_name)>$this->mMaxFileNameLen) //如果文件名大于所允许的最长字符,也进行截取
{ //文件名的长度是根据 总长度 减 扩展名长度得到
$this->mStrErr.="文件名长度大于:".$this->mMaxFileNameLen." !";
$file_name_name=substr($file_name_name,0,$this->mMaxFileNameLen-strlen($file_name_ext));
}
} //对扩展名进行过滤检查
while(list($k, $v) = each($this->ExtFilter))
{
if(strstr($file_name_ext,$k)) //扩展名包含了关键字了
{
$this->mStrErr.="扩展名包含了关键字了:".$v." !";
$file_name_ext=str_replace($v,$k,$file_name_ext);
}
}
$file_name=$file_name_name.$file_name_ext;//[如果加了这个变量“$file_name_ext”,则上传后的文件将会多出一个扩展名] //重新得到新的文件名 //看将要上传的文件是不是已存在了,修改文件名
if(file_exists($this->Get_FileUpPath().$file_name))
{
$this->mStrErr.="要上传的文件名已存在:".$this->Get_FileUpPath().$file_name." !";
$file_name_name=substr($file_name_name,0,$this->mMaxFileNameLen);//为防止连续重复后文件名变得过长,在此截除
$count_i=0;
while(file_exists($this->Get_FileUpPath().$file_name_name.$count_i.$file_name_ext))$count_i++;//a1 a2 a3
$file_name=$file_name_name.$count_i.$file_name_ext; //重新得到新的文件名
} //此时已得到最终的文件名
$this->Set_FileName($file_name); //重新设置类成员变量的文件名称
//验证文件类型是否正确
if(false==$this->Check_FileUpType())
{
return false;
}
$this->Show_Debug();
return !false;
}//END Check_File
解决方案 »
- include '../lib/functions.php';与include '../../lib/functions.php'的区别;
- 提问: 这个网站的流媒体是如何实现的,采用的是什么方法
- php 多维数组排序问题 把数组test_data按id_arr顺序重新排序.
- mysql 数据库查询问题 急!
- 找一个能直接将png格式转为ico格式的代码~~
- 能否得到提交过来的<input type="file">的全值?
- 关于我下一步的学习方向,请高手指点
- Mysql启动不了怎么办?
- 怎么实现html文本框输入链接到实时图片显示
- 数据表有2条以上的记录时第一条会显示第二条记录的内容
- PHP为什么不能连接msyql4.1?
- 文件用copy函数上传的问题,高分请教!请帮助我完成结贴的愿望!
函 数 名: Check_FileUpType
功能描述: 检查文件上传所允许的类型
函数说明: 直接调用
调用函数: Check_FileUpType()
参数:
返 回: 返回 true 或 false ,表示验证是否成功
设 计 者: ggg 日期: 2004-9-1 7:04
修 改 者: ggg 日期: 2004-9-1 7:04
版 本: 1.0
**+-----------------------------------------------
*/ function Check_FileUpType()
{
$file_up_type=$this->Get_FileUpType();
if(empty($file_up_type)) //如果文件类型没指定就表示允许所有的类型
{
return !false;
} $file_type=$this->Get_FileType();
$array_filetype= explode(",", $file_up_type); //判断传过来的文件类型是否符合 以,分隔
for($count_i=0;$count_i<count($array_filetype);$count_i++)
{
$cnt_filetype=trim($array_filetype[$count_i]); //得到这次循环的文件类型
//$cnt_filetype_len=strlen($cnt_filetype);
if(strstr($file_type,$cnt_filetype)) //只要一个类型符合就通过
//if(substr($file_type, -$cnt_filetype_len)==$cnt_filetype) 只要一个类型符合就通过
{
break;
}
}
if($count_i==count($array_filetype)) //表示一项类型都不符合
{
$this->mStrErr="请确认上传的类型为".$file_up_type."!";
$this->Show_Debug();
return false;
}
return !false;
}// END Check_FileUpType/**+-----------------------------------------------
函 数 名: UpLoad
功能描述: 上传文件
函数说明: 类的构造函数 用于初始化类的成员变量
可以采用 GggFileUpload("aaa.gif","aaa.gif");来更新文件的功能 来达到先删除服务器上 aaa.gif 再次上传的文件改成 aaa.gif 功能
如果不指定 originalFile 可运用于第一次添加文件的状态
调用函数: GggFileUpload($keepName,$originalFile)
参数:
$keepName
指定其参数表示上传文件后以keepName命名文件名,但如果该文件已存在或文件名检查不通过程序会在对该文件名进行修改
$originalFile
原来的文件名,设置该项用于更新.程序会在文件上传前先删除originalFile
返 回: 上传失败返回空 否则返回上传成功后的文件名
设 计 者: ggg 日期: 2004-9-1 5:55
修 改 者: ggg 日期: 2004-9-1 5:55
版 本: 1.0
**+-----------------------------------------------
*/
function ReRes()//真值处理函数
{
$this->$uploadRes = true;
return $this->$uploadRes;
} function UpLoad($keepName="",$originalFile="")
{
if(!empty($keepName))
{
$this->Set_FileName($keepName); //改变上传的文件名
$this->mStrErr="改变上传的文件名: ".$this->Get_FileName()."";
$this->Show_Debug();
}
if(!empty($originalFile) && file_exists($this->Get_FileUpPath().$originalFile))
{
@unlink($this->Get_FileUpPath().$originalFile);//先删除originalFile文件
$this->mStrErr="删除了: ".$this->Get_FileUpPath().$originalFile." 文件";
$this->Show_Debug();
}
$this->mStrErr="";
/*
$this->Set_File($inputName);
$this->Set_FileUpPath($fileUpPath);
$this->Set_FileUpSize($fileUpSize);
$this->Set_FileUpType($fileUpType);
print($this->mInputName."<br>");
print($this->mFileUpType."<br>");
print($this->mFileUpSize."<br>");
print($this->mFileUpPath."<br>"); print($this->mFileType."<br>");
print($this->mFileSize."<br>");
print($this->mFileName."<br>");
print($this->mFileTmpName."<br>");
*/ if($this->Check_File()){
if (@copy($this->Get_FileTmpName(),$this->Get_FileUpPath().$this->Get_FileName())){
$this->ReRes();
}
} else {
return "文件检验失败!";
}
/* 即使复制成功也返回失败。不知道是什么原因
if(copy($this->Get_FileTmpName(),$this->Get_FileUpPath().$this->Get_FileName())==false); //上传文件
{
$this->mStrErr="复制档案: ".$this->Get_FileUpPath().$this->Get_FileName()." 失败";
$this->Show_Debug();
return "";
}*/ @unlink($this->Get_FileTmpName());//删除临时文件
return $this->Get_FileName();
}
/* 得到以某字符间隔的字符头,尾部 */
function Get_Str_Head($varName,$separator='.') //返回文件的名字
{
// print($varName);
// die();
$file_len=0;
if(!($file_len=strrpos($varName, $separator))) //如果文件没有扩展名,文件名即为全文件
{
$file_len=strlen($varName);
}
$file_name=substr($varName,0,$file_len); //得到上传文件名字
return(substr($varName,0,$file_len));
}//Get_Str_Head() function Get_Str_End($varName,$separator='.') //返回文件的扩展名
{
$file_len=0;
$file_ext="";
if($file_len=strrpos($varName, $separator)) //如果文件没有扩展名,文件名即为全文件,扩展名空
{
$file_ext=substr($varName,-(strlen($varName)-$file_len)); //得到上传文件的扩展名
}
return($file_ext);
}//Get_Str_End()// 自定义将字串里的小写全部转成大写,但不破坏中文字
function MyStrTolower($varName)
{
return preg_replace('/[A-Z]+/e',"strtolower('\\0')",$varName);
} }// END class GggFileUpload