加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_泰州站长网 (http://www.0523zz.com/)- 视觉智能、AI应用、CDN、行业物联网、智能数字人!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php多文件上传与上传文件原理详解

发布时间:2022-07-18 14:06:50 所属栏目:PHP教程 来源:互联网
导读:首先用php的socket函数库建立一个临时的http服务器,在某一端口监听,然后把 ip地址和端口号通知客户端,客户端把上传表单提交(临时服务器),临时服务器接受客户端请求,并读取post数据,分析并获取客户端上传的文件信息,把文件保存在服务器上,然后关闭临时服务器,
  首先用php的socket函数库建立一个临时的http服务器,在某一端口监听,然后把 ip地址和端口号通知客户端,客户端把上传表单提交(临时服务器),临时服务器接受客户端请求,并读取post数据,分析并获取客户端上传的文件信息,把文件保存在服务器上,然后关闭临时服务器,释放资源,上传完成,有点绕,不过思路还是简单的,代码如下:
 
  <?php
  class upload {  
  public $up_ext=array(), $up_max=5210, $up_dir;  
  private $up_name, $up_rename=true, $up_num=0, $up_files=array(), $up_ret=array();
   
  function __construct($name, $ext=array(), $rename=true) {  
  if (!emptyempty($name)) {  
   $this->up_dir = website_dirroot.  
  $globals['cfg_upload_path'];  
  $this->initupload();  
  } else {  
  exit('upload文件域名称为空,初始化失败!');  
  }  
  }
   
  private function initupload() {  
  if (is_array($_files[$this->up_name])) {  
  $up_arr = count($_files[$this->up_name]);  
  $up_all = count($_files[$this->up_name], 1);  
  $up_cnt = ($up_all - $up_arr) / $up_arr;  
  for ($i = 0; $i < $up_cnt; $i ++) {  
  if ($_files[$this->up_name]['error'][$i] != 4) {  
   }  
  $this->up_num = count($this->up_files);  
  } else {  
  if (isset($_files[$this->up_name])) {  
  $this->up_files = array(  
  'tmp_name' => $_files[$this->up_name]['tmp_name'],  
  'name' => $_files[$this->up_name]['name'],  
  'type' => $_files[$this->up_name]['type'],  
  'size' => $_files[$this->up_name]['size'],  
  'error' => $_files[$this->up_name]['error']  
  );  
  $this->up_num = 1;  
  } else {  
  exit('没找找到需要upload的文件!');  
  }  
  }
   
  $this->chkupload();  
  }
   
  private function chkupload() {  
  if (emptyempty($this->up_ext)) {  
  $up_mime = array('image/wbmp', 'image/bmp', 'image/gif', 'image/pjpeg', 'image/x-png');  
  foreach ($this->up_files as $up_file) {  
  $up_allw = false;  
  foreach ($up_mime as $mime) {  
  if ($up_file['type'] == $mime) {  
  $up_allw = true; break;  
  }  
  }  
  !$up_allw && exit('不允许上传'.$up_file['type'].'格式的文件!');
   
  if ($up_file['size'] / 1024 > $this->up_max) {  
  exit('不允许上传大于 '.$this->up_max.'k 的文件!');  
  }  
   }  
  !$up_allw && exit('不允许上传.'.$up_ext.'格式的文件!');
   
  if ($up_file['size'] / 1024 > $this->up_max) {  
  exit('不允许上传大于 '.$this->up_max.'k 的文件!');  
  }  
  }  
  }
   
  $this->uploading();  
  }
   
  private function uploading() {  
  if (io::dircreate($this->up_dir)) {  
  if (chmod($this->up_dir, 0777)) {  
   if (is_uploaded_file($up_file['tmp_name'])) {  
  $file_name = $up_file['name'];  
  if ($this->up_rename) {  
  $file_ext = end(explode('.', $file_name));  
  $file_rnd = substr(md5(uniqid()), mt_rand(0, 26), 6);  
  $file_name = date('ymdhis').'_'.$file_rnd.'.'.$file_ext;  
  }  
  $file_name = $this->up_dir.'/'.$file_name; 

(编辑:云计算网_泰州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读