一個完整的php文件上傳類實例講解
這個文件上傳類可以自定上傳文件大小與上傳文件類型及文件保存地址,在使用過程中有一個問題就是如果是中文文件名進行上傳就會出現(xiàn)亂碼,所以大家解決辦法就是把頁面保存成uft8即可解決。
下面就是為大家分享的代碼:
<?php
define('NO_FILE', '不存在上傳文件');
define('NOT_ALLOW_EXT', '文件類型不在允許范圍內(nèi)');
define('NOT_ALLOW_SIZE', '文件大小不在允許范圍內(nèi)');
define('HAS_THE_FILE', '該文件已經(jīng)存在');
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;
}
}
}
/***使用方法與參數(shù)說明***/
/***
第一個參數(shù)$dir 為上傳文件存放的路徑
第二個參數(shù)為$_FILES 為你那個上傳文件變量
第三個參數(shù)允許文件大小 單位為MB
第四個參數(shù)允許的文件類型 格式為jpg|png|gif
第五個參數(shù)是否需要生成新的文件名
第六個參數(shù)為返回的提示格式 0為直接提示上傳正確 1則返回一個數(shù)組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();
?>
調(diào)用方法
代碼如下
$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的頁面將數(shù)據(jù)進行提交的,所以生成的文件如果保持原來的中文名字的話在文件夾中看到就是亂碼的名字,如果不想出現(xiàn)亂碼的話需要進行一下編碼的轉(zhuǎn)換。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助。
相關(guān)文章
Yii2框架實現(xiàn)數(shù)據(jù)庫常用操作總結(jié)
本篇文章主要介紹了Yii2框架實現(xiàn)數(shù)據(jù)庫常用操作總結(jié),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-02-02
使用PHP如何實現(xiàn)高效安全的ftp服務(wù)器(二)
這篇文章主要介紹了使用PHP如何實現(xiàn)高效安全的ftp服務(wù)器(二)的相關(guān)資料,需要的朋友可以參考下2015-12-12
thinkphp3.x連接mysql數(shù)據(jù)庫的方法(具體操作步驟)
這篇文章主要介紹了thinkphp3.x連接mysql數(shù)據(jù)庫的方法,詳細分析了thinkPHP3.x操作數(shù)據(jù)庫的具體步驟,包括慣例配置文件設(shè)置,sql語句創(chuàng)建表以及針對數(shù)據(jù)庫的數(shù)據(jù)插入操作等,需要的朋友可以參考下2016-05-05

