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; (编辑:云计算网_泰州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |