我常用的文件上传函数(PHP)

发布时间:2008年09月08日      浏览次数:849 次
<?
#################################################################################
# 文件上传函数 upfile($file_frm_name,$file_folder,$file_name,$allow_file_type,$error)
# 返回值为:上传文件名称(不包含路径) 以及 $error,返回值不为空则表示上传成功,否则,上传失败
# 参数 file_frm_name:(必需)指定上传form表单中的文件域名称
# 参数 file_folder:(可省略)指定上传文件的目标文件夹,省略默认为当前目录
# 参数 file_name:(可省略)指定上传文件的目标文件名,无需后缀,缺省为自动命名
# 参数 allow_file_type:(可省略)指定允许上传的文件类型,多个以“|”分隔,如:gif|jpg,表示只允许上传gif与jpg格式的图片,缺省为允许上传任何格式的文件(有风险,最好指定)
# 参数error:(可省略)在此指定一个用于返回错误原因变量,可在调用本函数后,获得运行的错误原因
# 调用函数示例:upfile("upfile","img/","","gif|jpg",$error)
# 限制文件上传大小可在form表单第一行中添加<input name="MAX_FILE_SIZE" type="hidden" id="MAX_FILE_SIZE" value="限制文件大小字节数" />进行控制
#################################################################################
function upfile($file_frm_name,$file_folder = "",$file_name = "",$allow_file_type = "",&$error = ""){
      if ( trim($file_frm_name)=="" ){
            $error = "上传文件表单名称不能为空!";
            return "";
      }
      //上传图片
      $upload_file = trim($_FILES[$file_frm_name]["tmp_name"]);
      $upload_file_name = trim($_FILES[$file_frm_name]["name"]);
      $upload_error = trim($_FILES[$file_frm_name]["error"]);
      switch($upload_error){
            case 0:
                  $result = "yes";
                  break;
            case 1:
                  $error = "上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值!";
                  return "";
                  break;
            case 2:
                  $error = "上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值!";
                  return "";
                  break;
            case 3:
                  $error = "文件只有部分被上传!";
                  return "";
                  break;
            case 4:
                  $error = "没有文件被上传!";
                  return "";
                  break;
      }       
      if( $upload_file <> "" ) {
            $houzhui = trim(strtolower(substr($upload_file_name,strrpos($upload_file_name,".") - strlen($upload_file_name))));//获取上传文件名的后缀
            //检查上传文件类型是否合法,$allow_file_type的值为允许上传的文件类型,多个以“|”分隔,如:gif|jpg
            if ( trim($allow_file_type)<>"" ){
                  $file_type_arr = explode("|",trim($allow_file_type));
                  //判断上传文件格式是否合法
                  for ( $i=0;$i<count($file_type_arr);$i++ ){
                        if ( $houzhui == ".".trim($file_type_arr[$i])){
                              $allow_upfile = "allow";
                        }
                  }
                  if ( $allow_upfile <> "allow" ){
                        $error = "上传的文件类型不匹配,只能上传 $allow_file_type 等格式,请正确选择要上传的文件!";
                        return "";
                  }
            }
            if ( $result == "yes" ){
                  if ( trim($file_folder)=="" ){
                        $file_folder = "./";
                  }
                  if ( substr(trim($file_folder),-1) <> "/" ) $file_folder .= "/"; //如果目录后没有以“/”结尾,则添加
                  create_folder(trim($file_folder)); //判断文件夹是否存在,如果不存在则创建
                  if ( trim($file_name) == "" ) $file_name = date("YmdHis");//如果没有指定文件名,则自动生成
                  $file_name = trim($file_name).$houzhui;
                  $file_target = trim($file_folder).trim($file_name);
                  copy($upload_file,$file_target);//上传文件
                  return $file_name;
            }
            unlink($upload_file); //删除临时文件
      }
}
#################################################################################
# 其它相关函数
#################################################################################
//创建文件夹,可创建多层文件夹,如:create_folder("./1/2/3")
function create_folder($path){
      if (!file_exists($path)) {
            create_folder(dirname($path));
            mkdir($path, 0777);
      }
}
?>
文章来源:桂林唯创网络
免责声明:本站相关技术文章信息部分来自网络,目的主要是传播更多信息,如果您认为本站的某些信息侵犯了您的版权,请与我们联系,我们会即时妥善的处理,谢谢合作!