zoukankan      html  css  js  c++  java
  • PHP实现的多文件上传类及用法示例

    这篇文章主要介绍了PHP实现的多文件上传类及用法,详细分析了php实现的多文件上传类与具体的使用技巧,需要的朋友可以参考下

    1、upFiles.css.php 文件

    <?php

    class UploadFiles{
    private $maxsize = '1000000'; //允许上传文件最大长度
    private $allowtype = array('jpg','png','gif','jpeg');//允许上传文件类型
    private $israndfile = true;//是否随机文件名
    private $filepath;//上传路径
    private $originName;//上传的源文件
    private $tmpfileName;//临时文件名
    private $newfileName;//新文件名
    private $fileSize;//文件大小
    private $fileType;//文件类型
    private $errorNum = 0;//错误号
    private $errorMessg = array();//错误消息
    //对成员初始化
    function __construct($options = array()){
    foreach($options as $key=>$val){
     $key = strtolower($key);
     //查看传进来的数组里下标是否与成员属性相同
     //print_r(array_keys(get_class_vars(get_class($this))));
     if(!in_array($key,array_keys(get_class_vars(get_class($this))))){
     continue;
     }else{
     $this->setOption($key,$val);
     }
    }
    }
    private function setOption($key,$val){
      $this->$key = $val;
    //echo $this->errorNum."<br>";
    }
    //检查文件上传路径
    private function checkfilePath(){
    //echo $this->filepath;
    if(empty($this->filepath)){
     $this->setOption('errorNum',"-5");
     return false;
    }
    if(!file_exists($this->filepath) || !is_writable($this->filepath)){
     if(!@mkdir($this->filepath,0755)){
     $this->setOption('errorNum','-4');
     return false;
     }
    }
    return true;
    }
    //获取错误信息
    private function getError(){
    $str = "上传文件{$this->originName}出错---";
    switch($this->errorNum){
     case 4; $str .= "没有文件被上传";break;
     case 3; $str .= "文件只被部分上传";break;
     case 2; $str .= "超过文件表单允许大小";break;
     case 1; $str .= "超过php.ini中允许大小";break;
     case -1; $str .= "未允许的类型";break;
     case -2; $str .= "文件过大,不能超过".$this->maxsize."个字节";break;
     case -3; $str .= "上传失败";break;
     case -4; $str .= "建立文件上传目录失败";break;
     case -5; $str .= "必须指定上传路径";break;
     default; $str .= "未知错误";
    }
    return $str."<br>";
    }
    //检查文件类型
    private function checkfileType(){
    //echo $this->fileType;
    if(!in_array(strtolower($this->fileType),$this->allowtype)){
    $this->setOption('errorNum','-1');
     return false;
    }else{
     return true;
    }
    }
    //检查文件大小
    private function checkfileSize(){
    if($this->fileSize > $this->maxsize){
     $this->setOption('errorNum','-2');
     return false;
    }else{
     return true;
    }
    }
    //处理随机文件名称
    private function prorandFile(){
    $ch = $this->israndfile;
    if($ch == 'true'){
     return true;
    }else{
     return false;
    }
    }
    //
    private function setFiles($name="",$tmp_name="",$size="",$error=""){
    //检查上传路径
    if(!$this->checkfilePath()){
     //$this->errorMessg = $this->getError();
     return false;
    }
    //echo $error."<br>";
    if($error){
    $this->setOption('errorNum',$error);
     return false;
    }
    $arrstr  = explode('.',$name);
    $type   = end($arrstr);
    $this->setOption('originName',$name);
    $this->setOption('fileSize',$size);
    $this->setOption('fileType',$type);
    $this->setOption('tmpfileName',$tmp_name);
    return true;
    }
    //检查是否有文件上传
    function checkFile($formname){
    if(!@$_FILES[$formname]){
     $this->setOption('errorNum',4);
     return false;
    }else{
     return true;
    }
    }
    //上传文件
    function uploadeFile($formname){
    if(!$this->checkFile($formname)){
     $this->errorMessg = $this->getError();
     return false;
    }
    $return  = true;
    $name   = @$_FILES[$formname]['name'];
    $tmp_name = @$_FILES[$formname]['tmp_name'];
    $size   = @$_FILES[$formname]['size'];
    $error  = @$_FILES[$formname]['error'];
    //$type   = $_FILES[$formname]['type'];
    if(is_array($name)){
     $errors = array();
     for($i=0; $i<count($name); $i++){
     if($this->setFiles($name[$i],$tmp_name[$i],$size[$i],$error[$i])){
      if(!$this->checkfileSize() || !$this->checkfileType()){
      $errors[] = $this->getError();
      $return = false;
      }
     }else{
      $errors[] = $this->getError();
      $return = false;
     }
     if(!$return) $this->setFiles();
     }
     if($return){
     $newfileN = array();
     for($i=0; $i<count($name); $i++){
      if($this->setFiles($name[$i],$tmp_name[$i],$size[$i],$error[$i])){
      if(!$this->copyFile()){
       $errors[] = $this->getError();
       $return = false;
      }else{
       $newfileN[] = $this->newfileName;
      }
      }
      $this->newfileName = $newfileN;
     }
     }
     //print_r($errors);
     $this->errorMessg = $errors;
     //echo $errors;
     return $return;
    }else{
     if($this->setFiles($name,$tmp_name,$size,$error)){
     $return = true;
     if($error) var_dump($error);
     if($this->checkfileSize() && $this->checkfileType()){
     }else{
      $return = false;
     }
     }else{
     $return = false;
     }
     if(!$return){
     $this->errorMessg = $this->getError();
     }
     return $return;
    }
    }
    //获取上传后的文件名
    function getnewFile(){
     return $this->newfileName;
    }
    //把文件拷贝到指定的路径
    function copyFile(){
    $filepath = rtrim($this->filepath,'/')."/";
    if(!$this->errorNum){
     if($this->prorandFile()){
      $this->newfileName = date('Ymdhis').rand(1000,9999).".".$this->fileType;
     }else{
      $this->newfileName = $this->originName;
     }
     if(!move_uploaded_file($this->tmpfileName,$filepath.$this->newfileName)){
     $this->setOption('errorNum',-3);
     return false;
     }else{
     return true;
     }
    }else{
     return false;
    }
    }
    //上传错误后返回的消息
    function gteerror(){
     $err = $this->errorMessg;
    return $err;
    }
    }
    ?>

    2、使用方法

    uploade.php 文件:

    <?php
    //print_r($_FILES['spic']);
    header('Content-Type:text/html;charset=utf-8');
    //if(@$_FILES['spic'])echo "ddddddddd";;
    include('upFiles.css.php');
    $upfile = new UploadFiles(array('filepath'=>'./upload','allowtype'=>array('php','bmp','gif','jpg','png'),'israndfile'=>true,'maxsize'=>'1000000'));
    if($upfile ->uploadeFile('spic')){
    $arrfile = $upfile ->getnewFile();
    foreach($arrfile as $v){
    echo $v,"<br/>";
    }
    echo "上传成功!";
    }else{
    $err = $upfile ->gteerror();
    if(is_array($err)){
    foreach($err as $v1){
    echo $v1,"<br/>";
    }
    }else{
    echo $err;
    }
    //var_dump($err);
    }
    //var_dump($upfile);
    ?>

    HTML 文件:

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>无标题文档</title>
    <script type="text/javascript">
    function Check(){
    //alert('dddd');
    for(i=1; i<9; i++){
    if(document.getElementById('v'+i).value == ''){
    document.getElementById('v'+i).name = 'uu';
    }
    }
    }
    </script>
    </head>
    <body>
    <form name="upfile" action="uploade.php" method="post" enctype="multipart/form-data">
    <input type="file" name="spic[]" id="v1" /><br/>
    <input type="file" name="spic[]" id="v2" /><br/>
    <input type="file" name="spic[]" id="v3" /><br/>
    <input type="file" name="spic[]" id="v4" /><br/>
    <input type="file" name="spic[]" id="v5" /><br/>
    <input type="file" name="spic[]" id="v6" /><br/>
    <input type="file" name="spic[]" id="v7" /><br/>
    <input type="file" name="spic[]" id="v8" /><br/>
    <input type="submit" name="sub" value="提交" onclick="return Check()" />
    <input type="reset" name="res" value="重填" />
    </form>
    </body>
    </html>

  • 相关阅读:
    不可错过的几款GitHub开源项目
    Android OTG之USB转串口模块通讯
    Multiple dex files define Lokhttp3/internal/wsWebSocketProtocol
    npm install安装依赖包失败
    Jquery 添加删除属性、添加删除class、添加删除Css(转载)
    jquery 获取一个元素的坐标位置
    Axure9 最新版的授权码(转)
    js实现上移 下移 置顶 置底操作
    iframe子页面获取父页面元素和window对象
    window.onresize与$(window).resize()的用法
  • 原文地址:https://www.cnblogs.com/rainblack/p/5828816.html
Copyright © 2011-2022 走看看