php 上传文件实例,一个完整的php文件上传类实例讲解
发布日期:2021-06-24 14:05:12 浏览次数:2 分类:技术文章

本文共 3208 字,大约阅读时间需要 10 分钟。

这个文件上传类可以自定上传文件大小与上传文件类型及文件保存地址,在使用过程中有一个问题就是如果是中文文件名进行上传就会出现乱码,所以大家解决办法就是把页面保存成uft8即可解决。

下面就是为大家分享的代码:

define('NO_FILE', '不存在上传文件');

define('NOT_ALLOW_EXT', '文件类型不在允许范围内');

define('NOT_ALLOW_SIZE', '文件大小不在允许范围内');

define('HAS_THE_FILE', '该文件已经存在');

define('UPLOAD_FAILED', '上传失败');

define('UPLOAD_SUCCESS', '上传成功');

class file_uploader

{

var $_file;

var $_filesize;

var $_fileext;

var $_filedir;

var $_filename;

var $_filetmpname;

var $allowsize;

var $allowext;

var $neednewname;

var $newname;

var $syslang;

var $report;

function ready($filedir = '', $file, $allowsize = '', $allowext = '', $neednewname = false, $report = 0){

$this->_filedir = is_dir($filedir) ? $filedir : '';

if(empty($file) || !isset($file['size']) || $file['size'] == 0) $this->error(NO_FILE);

$this->_filesize = $file['size'];

$this->_filename = $file['name'];

$this->_filetmpname = $file['tmp_name'];

$this->allowsize = $allowsize;

$this->allowext = $allowext;

$this->neednewname = ($neednewname) ? true : false;

$this->newname = '';

$this->report = $report;

}

function do_upload(){

if(!is_uploaded_file($this->_filetmpname)) $this->error(NO_FILE);

if($this->chk_ext()){

$this->error(NOT_ALLOW_EXT);

return '';

}

if($this->chk_size()){

$this->error(NOT_ALLOW_SIZE);

return '';

}

if($this->neednewname) $this->newname = $this->generate_name().".".$this->get_fileext();

if($this->chk_hasfile()){

$this->error(HAS_THE_FILE);

return '';

}

$filename = empty($this->newname) ? @iconv('utf-8','gb2312',$this->_filename) : $this->newname;

@chmod($this->_filedir.$filename, 0777);

if(move_uploaded_file($this->_filetmpname, $this->_filedir.$filename)){

return $this->result();

}else{

$this->error(UPLOAD_FAILED);

return '';

}

}

function chk_ext(){

if(empty($this->allowext) || in_array($this->get_fileext(), explode("|",$this->allowext))) return false;

return true;

}

function chk_size(){

if(empty($this->allowsize) || get_filesize <= $this->allowsize*1024*1024) return false;

return true;

}

function get_filesize(){

return $this->_filesize;

}

function get_fileext(){

return substr($this->_filename,strrpos($this->_filename,".")+1);

}

function generate_name(){

return substr(md5(time()),26);

}

function chk_hasfile(){

return is_file($this->_filedir.$this->_filename);

}

function error($tip){

echo $tip;

}

function result(){

if($this->report){

$filename = empty($this->newname) ? $this->_filename : $this->newname;

$arr = array('filename' => $filename, 'filesize' => $this->_filesize, 'tip' => UPLOAD_SUCCESS);

return $arr;

}else{

return UPLOAD_SUCCESS;

}

}

}

/***使用方法与参数说明***/

/***

第一个参数$dir 为上传文件存放的路径

第二个参数为$_FILES 为你那个上传文件变量

第三个参数允许文件大小 单位为MB

第四个参数允许的文件类型 格式为jpg|png|gif

第五个参数是否需要生成新的文件名

第六个参数为返回的提示格式 0为直接提示上传正确 1则返回一个数组array('filename' => $filename, 'filesize' => $this->_filesize, 'tip' => UPLOAD_SUCCESS);

***/

//require("类文件");

//$u = new file_uploader;

//$u->ready($dir, $_FILES['upload_file'], false, false, true, 0);

//echo $u->do_upload();

?>

调用方法

代码如下

$dir = 'upload/';

require("upload_class.php");

$u = new file_uploader;

$u->ready($dir, $_FILES['upload_file'], false, false, true, 0);

echo $u->do_upload();

补充说明:在编码上面还是有些问题,自己是在utf8的页面将数据进行提交的,所以生成的文件如果保持原来的中文名字的话在文件夹中看到就是乱码的名字,如果不想出现乱码的话需要进行一下编码的转换。

以上就是本文的全部内容,希望对大家的学习有所帮助。

转载地址:https://blog.csdn.net/weixin_33308985/article/details/115508400 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:php字符串里含有全角符号,php将字符串中全角字符转换为半角字符_PHP教程
下一篇:最大队伍士兵数java,hdu1276(士兵队列训练问题) java集合水过

发表评论

最新留言

网站不错 人气很旺了 加油
[***.192.178.218]2024年04月07日 22时48分58秒