一個完美php檔案上傳類使用執行個體_PHP教程

來源:互聯網
上載者:User
這個檔案上傳類可以自定上傳檔案大小與上傳檔案類型及檔案儲存地址,使用起來也大興非常的方法,有一個文就是如果是中文檔案名稱是上傳會是亂碼,所以大家解決辦法就是把頁面儲存成uft8即可解決。

今天終於算是可以來更新一下paperen的網站,嗯……因為寫畢設論文寫累了所以就發表一篇關於上傳檔案類的東東吧,這個類也是自己寫的,不知道對大家有沒有用,如果覺得可以就拿去用吧。不過在編碼上面還是沒做好,自己是在utf8的頁面將資料進行提交的,所以產生的檔案如果保持原來的中文名字的話在檔案夾中看到就是亂碼的名字,如果不想出現亂碼的話需要進行一下編碼的轉換。?

代碼如下 複製代碼

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();

就像N年前那個染頭髮的廣告說的那句,“得左!染黑頭髮就是這麼簡單!”一樣,這裡上傳檔案的操作也是“上傳檔案就這麼簡單!”。當然那個$_FILES['upload_file']是對應表單中的file類型的控制項的名字。而需不需要在上傳後輸出提示就看你自己啦,關於參數在代碼那裡面有詳細說明,不過這裡也是放出來吧。?

ready方法的參數說明:

第一個參數$dir 為上傳檔案存放的路徑
第二個參數為$_FILES 為你那個上傳檔案變數
第三個參數允許檔案大小 單位為MB
第四個參數允許的檔案類型 格式為jpg|png|gif
第五個參數是否需要產生新的檔案名稱
第六個參數為返回的提示格式 0為直接提示上傳正確 1則返回一個數組array('filename' => 上傳的檔案名稱字, 'filesize' => 檔案大小, 'tip' => 成功上傳);?

很好!這樣就完成了一篇文章,不過也花了不少時間呢……?

http://www.bkjia.com/PHPjc/632737.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/632737.htmlTechArticle這個檔案上傳類可以自定上傳檔案大小與上傳檔案類型及檔案儲存地址,使用起來也大興非常的方法,有一個文就是如果是中文檔案名稱是上...

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.