PHP多文件上傳類實(shí)例
更新時(shí)間:2015年03月07日 11:09:50 作者:瘋狂的流浪
這篇文章主要介紹了PHP多文件上傳類,實(shí)例分析了php實(shí)現(xiàn)多文件上傳的原理與實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
本文實(shí)例講述了PHP多文件上傳類。分享給大家供大家參考。具體如下:
復(fù)制代碼 代碼如下:
<?php
/*
PHP多文件上傳類
修改:Linvo 2008-2-15
*/
class more_file_upload{
const FILE_PATH='../upfileclass/uploadfile/';
var $file_type;
var $file_type_array;
var $file_type_real_array;
var $file_type_string;
var $file_name;
var $file_size;
var $file_tmp_name;
var $file_error;
var $handledate;
var $totalsize=0;
function __construct($file_name,$file_error,$file_size,$file_tmp_name,$file_type){
$this->handledate=date('m-d-Y');
if (!empty($file_name)){
$this->$file_name = $file_name;
$this->$file_error = $file_error;
$this->$file_size = $file_size;
$this->$file_tmp_name = $file_tmp_name;
$this->$file_type = $file_type;
$this->$file_type_array = array('/', 'image/gif', 'image/jpg', 'image/jpeg', 'image/pjpeg', 'image/png');
$this->$file_type_real_array = array(0.1, 'jpg'=>74707370, 'gif'=>7173, 'bmp'=>6677, 'png'=>807871);
$this->show_execute_message($this->$file_error,$this->$file_name,$this->$file_type,$this->$file_size);
}
}
function __destruct(){
$this->$file_name = NULL;
$this->$file_error = NULL;
$this->$file_size = NULL;
$this->$file_tmp_name = NULL;
$this->$file_type = NULL;
$this->$totalsize = 0;
}
function show_execute_message($smfileerror,$smfilename,$smfiletype,$smfilesize){
if($smfileerror>0){
switch ($smfileerror){
case 1: $smfilemessage='<strong>文件超過(guò)服務(wù)器的約定大??!</strong>';break;
case 2: $smfilemessage ='<strong>文件超過(guò)指定的文件大??!</strong>';break;
case 3: $smfilemessage='<strong>文件只上傳了部分!</strong>';break;
case 4: echo "$this->$file_name ".'文件上傳失?。?lt;br/>';break;
}
self::__destruct();
}else{
$smfiletypeflag = array_search($smfiletype,$this->$file_type_array);
//進(jìn)行真實(shí)格式驗(yàn)證
if($smfiletypeflag != false){
$file = fopen($this->$file_tmp_name, "rb");
$bin = fread(file, 10);
fclose($file);
$strInfo = @unpack("c10chars", $bin);
$typeCode = intval($strInfo['chars1'].$strInfo['chars2']);
$smfiletypeflag = array_search($typeCode, $this->$file_type_real_array);
if($smfiletypeflag == false){ //判斷是否是png圖片
$typeCode = intval($strInfo['chars2'].$strInfo['chars3'].$strInfo['chars4']);
$smfiletypeflag = array_search($typeCode, $this->$file_type_real_array);
if($smfiletypeflag == false){ //判斷是否是jpg圖片
$$typeCode = intval($strInfo['chars7'].$strInfo['chars8'].$strInfo['chars9'].$strInfo['chars10']);
$smfiletypeflag = array_search($typeCode, $this->$file_type_real_array);
}
}
}
if($smfiletypeflag == false){
$smfilemessage='<strong>文件類型不對(duì),請(qǐng)核實(shí)!</strong>';
self::__destruct();
}else{
$resflag = $$this->move_file($$this->$file_tmp_name,$this->$file_name);
if ($resflag == 1){
$smfilemessage = '文件上傳成功!';
$this->totalsize += intval($smfilesize);
self::__destruct();
}else{
$smfilemessage = '<strong>文件上傳失??!</strong>';
self::__destruct();
}
}
}
$$smfilesizeformat = $this->size_BKM($smfilesize);
echo '<tr>
<td align="left" >'.$smfilename.'</td>
<td align="center" >'.$smfiletype.'</td>
<td align="center" >'.$smfilesizeformat.'</td>
<td align="center" >'.smfilemessage.'</td>
</tr>';
}
function move_file($mvfiletmp,$mvfilename){ //移動(dòng)文件
$mvfilenamearr = explode('.',basename($mvfilename));
$mvfilenamearr[0] = $this->rand_string();
$mvfilename = implode('.',$mvfilenamearr);
if (is_uploaded_file($mvfiletmp)){
$uploadfile = self::FILE_PATH."$mvfilename";
$result = move_uploaded_file($mvfiletmp,$uploadfile);
return $result;
}
}
function rand_string(){
$string = md5(uniqid(rand().microtime()));
return $string;
}
function size_BKM($size){ // B/KB/MB單位轉(zhuǎn)換
if($size < 1024)
{
$size_BKM = (string)$size . " B";
}
elseif($size < (1024 * 1024))
{
$size_BKM = number_format((double)($size / 1024), 1) . " KB";
}else
{
$size_BKM = number_format((double)($size / (1024*1024)),1)." MB";
}
return $size_BKM;
}
}
?>
/*
PHP多文件上傳類
修改:Linvo 2008-2-15
*/
class more_file_upload{
const FILE_PATH='../upfileclass/uploadfile/';
var $file_type;
var $file_type_array;
var $file_type_real_array;
var $file_type_string;
var $file_name;
var $file_size;
var $file_tmp_name;
var $file_error;
var $handledate;
var $totalsize=0;
function __construct($file_name,$file_error,$file_size,$file_tmp_name,$file_type){
$this->handledate=date('m-d-Y');
if (!empty($file_name)){
$this->$file_name = $file_name;
$this->$file_error = $file_error;
$this->$file_size = $file_size;
$this->$file_tmp_name = $file_tmp_name;
$this->$file_type = $file_type;
$this->$file_type_array = array('/', 'image/gif', 'image/jpg', 'image/jpeg', 'image/pjpeg', 'image/png');
$this->$file_type_real_array = array(0.1, 'jpg'=>74707370, 'gif'=>7173, 'bmp'=>6677, 'png'=>807871);
$this->show_execute_message($this->$file_error,$this->$file_name,$this->$file_type,$this->$file_size);
}
}
function __destruct(){
$this->$file_name = NULL;
$this->$file_error = NULL;
$this->$file_size = NULL;
$this->$file_tmp_name = NULL;
$this->$file_type = NULL;
$this->$totalsize = 0;
}
function show_execute_message($smfileerror,$smfilename,$smfiletype,$smfilesize){
if($smfileerror>0){
switch ($smfileerror){
case 1: $smfilemessage='<strong>文件超過(guò)服務(wù)器的約定大??!</strong>';break;
case 2: $smfilemessage ='<strong>文件超過(guò)指定的文件大??!</strong>';break;
case 3: $smfilemessage='<strong>文件只上傳了部分!</strong>';break;
case 4: echo "$this->$file_name ".'文件上傳失?。?lt;br/>';break;
}
self::__destruct();
}else{
$smfiletypeflag = array_search($smfiletype,$this->$file_type_array);
//進(jìn)行真實(shí)格式驗(yàn)證
if($smfiletypeflag != false){
$file = fopen($this->$file_tmp_name, "rb");
$bin = fread(file, 10);
fclose($file);
$strInfo = @unpack("c10chars", $bin);
$typeCode = intval($strInfo['chars1'].$strInfo['chars2']);
$smfiletypeflag = array_search($typeCode, $this->$file_type_real_array);
if($smfiletypeflag == false){ //判斷是否是png圖片
$typeCode = intval($strInfo['chars2'].$strInfo['chars3'].$strInfo['chars4']);
$smfiletypeflag = array_search($typeCode, $this->$file_type_real_array);
if($smfiletypeflag == false){ //判斷是否是jpg圖片
$$typeCode = intval($strInfo['chars7'].$strInfo['chars8'].$strInfo['chars9'].$strInfo['chars10']);
$smfiletypeflag = array_search($typeCode, $this->$file_type_real_array);
}
}
}
if($smfiletypeflag == false){
$smfilemessage='<strong>文件類型不對(duì),請(qǐng)核實(shí)!</strong>';
self::__destruct();
}else{
$resflag = $$this->move_file($$this->$file_tmp_name,$this->$file_name);
if ($resflag == 1){
$smfilemessage = '文件上傳成功!';
$this->totalsize += intval($smfilesize);
self::__destruct();
}else{
$smfilemessage = '<strong>文件上傳失??!</strong>';
self::__destruct();
}
}
}
$$smfilesizeformat = $this->size_BKM($smfilesize);
echo '<tr>
<td align="left" >'.$smfilename.'</td>
<td align="center" >'.$smfiletype.'</td>
<td align="center" >'.$smfilesizeformat.'</td>
<td align="center" >'.smfilemessage.'</td>
</tr>';
}
function move_file($mvfiletmp,$mvfilename){ //移動(dòng)文件
$mvfilenamearr = explode('.',basename($mvfilename));
$mvfilenamearr[0] = $this->rand_string();
$mvfilename = implode('.',$mvfilenamearr);
if (is_uploaded_file($mvfiletmp)){
$uploadfile = self::FILE_PATH."$mvfilename";
$result = move_uploaded_file($mvfiletmp,$uploadfile);
return $result;
}
}
function rand_string(){
$string = md5(uniqid(rand().microtime()));
return $string;
}
function size_BKM($size){ // B/KB/MB單位轉(zhuǎn)換
if($size < 1024)
{
$size_BKM = (string)$size . " B";
}
elseif($size < (1024 * 1024))
{
$size_BKM = number_format((double)($size / 1024), 1) . " KB";
}else
{
$size_BKM = number_format((double)($size / (1024*1024)),1)." MB";
}
return $size_BKM;
}
}
?>
希望本文所述對(duì)大家的php程序設(shè)計(jì)有所幫助。
相關(guān)文章
PHP自動(dòng)選擇 連接本地還是遠(yuǎn)程數(shù)據(jù)庫(kù)
假設(shè)我們要在test.php文件中操作虛擬主機(jī)的數(shù)據(jù)庫(kù),則首先要在本地調(diào)試,那么必然要連接本地、遠(yuǎn)程兩個(gè)不同的數(shù)據(jù)庫(kù),問(wèn)題:怎么讓test.php自動(dòng)識(shí)別當(dāng)下該連接本地還是遠(yuǎn)程數(shù)據(jù)庫(kù)呢?2010-12-12
PHP 防注入函數(shù)(格式化數(shù)據(jù))
下面的函數(shù)通過(guò)格式化數(shù)據(jù)的方法實(shí)現(xiàn)數(shù)據(jù)的addslashes,不過(guò)也建議大家參考下discuz的防注入函數(shù)。2011-08-08
PHP函數(shù)nl2br()與自定義函數(shù)nl2p()換行用法分析
這篇文章主要介紹了PHP函數(shù)nl2br()與自定義函數(shù)nl2p()換行用法,結(jié)合實(shí)例形式分析PHP函數(shù)nl2br實(shí)現(xiàn)換行功能的優(yōu)缺點(diǎn)及自定義函數(shù)nl2p換行功能的使用技巧,需要的朋友可以參考下2016-04-04
PHP的命令行擴(kuò)展Readline相關(guān)函數(shù)的使用
PHP 作為一個(gè) Web 開發(fā)語(yǔ)言,相對(duì)來(lái)說(shuō),命令行程序并不是它的主戰(zhàn)場(chǎng)。所以很多年輕的 PHP 開發(fā)者可能連命令行腳本都沒有寫過(guò),更別提交互式的命令操作了。而今天,我們帶來(lái)的這個(gè)擴(kuò)展就是針對(duì) PHP 的交互式命令行操作的2021-05-05
學(xué)習(xí)php開源項(xiàng)目的源碼指南
這篇文章主要介紹了學(xué)習(xí)php開源項(xiàng)目的源碼指南,需要的朋友可以參考下2014-12-12

