php上傳文件的增強函數(shù)
更新時間:2010年07月21日 00:30:13 作者:
php文件上傳的增強函數(shù)首先變得傻瓜簡單化,但并不是該函數(shù)的簡單化就影響他的超強功能,并且加上了強大的除錯功能這是一函數(shù),當(dāng)然你可以把它變成一個類的方法!
表單中file對象,比如說$_FILES['doc'],$path為保存的路徑,$type為限制上傳的類型(他是一個數(shù)組,比如說限制上傳doc和docx和格式,那這個參數(shù)可以填array(“doc”,”.docx”),而且擴展名前有無”.”不作要求)。
<?php
function upload($file,$path,$type){
$state = array();
$state['error'] = "true";
$alltype = ""; // 所有可以上傳的類型,用"/"連接起來
$path = trim($path);
//為$path末尾加上"/"
if(strlen(strrchr($path,‘/‘)) <= 1){
$path .= "/";
}
//為類型加上開頭“.”
//將所有類型合成字符串,用"/"連接起來<span id="more-78"></span>
foreach($type as $key=>$typeone){
$type[$key] = $typeone = trim($typeone);
if(strlen(strchr($typeone,".")) != strlen($typeone)){
$type[$key] = ".".$typeone;}
$alltype .= $typeone.‘/‘;
}
$alltype = substr($alltype,0,strlen($alltype)-1); //去掉最后的“/”
if(empty($file['name'])){
$state['error'] = "沒有上傳{$alltype}類型文件!";
$state['errorid'] = 8;
return $state;
} else {
if (!$file['error']) {
$state['name'] = $file['name'];
$state['type'] = strrchr($state['name'],‘.‘);
if(in_array($state['type'],$type)){
$time = date("U");
$state['upname'] = $time.rand(1000,9999).$state['type']; //文件命名
if(copy($file['tmp_name'],$path.$state['upname'])){
$state['time'] = date("U"); //上傳的時間
$state['error'] = false;
return $state;
} else {
switch($file(‘error‘)){
case 1: $state['error'] = $state['name']."上傳失敗,文件大小超出了服務(wù)器的空間大??!";$state['errorid'] = 1;return $state;
case 2: $state['error'] = $state['name']."上傳失敗,要上傳的文件大小超出瀏覽器限制!";$state['errorid'] = 2;return $state;
case 3: $state['error'] = $state['name']."上傳失敗,文件僅部分被上傳!";$state['errorid'] = 3;return $state;
case 4: $state['error'] = $state['name']."上傳失敗,沒有找到要上傳的文件!";$state['errorid'] = 4;return $state;
case 5: $state['error'] = $state['name']."上傳失敗,服務(wù)器臨時文件夾丟失!";$state['errorid'] = 5;return $state;
case 6: $state['error'] = $state['name']."上傳失敗,文件寫入到臨時文件夾出錯!";$state['errorid'] = 6;return $state;
default: $state['error'] = $state['name']."上傳失敗,位置錯誤!";$state['errorid'] = 10;return $state;
}
}
} else {
$state['error'] = $state['name']."上傳失?。〔环纤蟼鞯奈募愋?!({$alltype})";
$state['errorid'] = 10;
return $state;
}
}
}
?>
返回值為一數(shù)組
$key value
error 錯誤詳情
errorid 錯誤id(出現(xiàn)錯誤才有值)
type 文件擴展名(擴展名前帶“.”)
upname 上傳的文件名
time 上傳的時間(從 Unix 紀(jì)元(1970-01-01 00:00)開始至今的秒數(shù))
錯誤類型
errorid error
false //上傳成功
1 上傳失敗,文件大小超出了服務(wù)器的空間大小!
2 上傳失敗,要上傳的文件大小超出瀏覽器限制!
3 上傳失敗,文件僅部分被上傳!
4 上傳失敗,沒有找到要上傳的文件!
5 上傳失敗,服務(wù)器臨時文件夾丟失!
6 上傳失敗,文件寫入到臨時文件夾出錯!
8 沒有上傳該類型文件! //表單中file對象為空
10 上傳失敗,位置錯誤!
復(fù)制代碼 代碼如下:
<?php
function upload($file,$path,$type){
$state = array();
$state['error'] = "true";
$alltype = ""; // 所有可以上傳的類型,用"/"連接起來
$path = trim($path);
//為$path末尾加上"/"
if(strlen(strrchr($path,‘/‘)) <= 1){
$path .= "/";
}
//為類型加上開頭“.”
//將所有類型合成字符串,用"/"連接起來<span id="more-78"></span>
foreach($type as $key=>$typeone){
$type[$key] = $typeone = trim($typeone);
if(strlen(strchr($typeone,".")) != strlen($typeone)){
$type[$key] = ".".$typeone;}
$alltype .= $typeone.‘/‘;
}
$alltype = substr($alltype,0,strlen($alltype)-1); //去掉最后的“/”
if(empty($file['name'])){
$state['error'] = "沒有上傳{$alltype}類型文件!";
$state['errorid'] = 8;
return $state;
} else {
if (!$file['error']) {
$state['name'] = $file['name'];
$state['type'] = strrchr($state['name'],‘.‘);
if(in_array($state['type'],$type)){
$time = date("U");
$state['upname'] = $time.rand(1000,9999).$state['type']; //文件命名
if(copy($file['tmp_name'],$path.$state['upname'])){
$state['time'] = date("U"); //上傳的時間
$state['error'] = false;
return $state;
} else {
switch($file(‘error‘)){
case 1: $state['error'] = $state['name']."上傳失敗,文件大小超出了服務(wù)器的空間大??!";$state['errorid'] = 1;return $state;
case 2: $state['error'] = $state['name']."上傳失敗,要上傳的文件大小超出瀏覽器限制!";$state['errorid'] = 2;return $state;
case 3: $state['error'] = $state['name']."上傳失敗,文件僅部分被上傳!";$state['errorid'] = 3;return $state;
case 4: $state['error'] = $state['name']."上傳失敗,沒有找到要上傳的文件!";$state['errorid'] = 4;return $state;
case 5: $state['error'] = $state['name']."上傳失敗,服務(wù)器臨時文件夾丟失!";$state['errorid'] = 5;return $state;
case 6: $state['error'] = $state['name']."上傳失敗,文件寫入到臨時文件夾出錯!";$state['errorid'] = 6;return $state;
default: $state['error'] = $state['name']."上傳失敗,位置錯誤!";$state['errorid'] = 10;return $state;
}
}
} else {
$state['error'] = $state['name']."上傳失?。〔环纤蟼鞯奈募愋?!({$alltype})";
$state['errorid'] = 10;
return $state;
}
}
}
?>
返回值為一數(shù)組
$key value
error 錯誤詳情
errorid 錯誤id(出現(xiàn)錯誤才有值)
type 文件擴展名(擴展名前帶“.”)
upname 上傳的文件名
time 上傳的時間(從 Unix 紀(jì)元(1970-01-01 00:00)開始至今的秒數(shù))
錯誤類型
errorid error
false //上傳成功
1 上傳失敗,文件大小超出了服務(wù)器的空間大小!
2 上傳失敗,要上傳的文件大小超出瀏覽器限制!
3 上傳失敗,文件僅部分被上傳!
4 上傳失敗,沒有找到要上傳的文件!
5 上傳失敗,服務(wù)器臨時文件夾丟失!
6 上傳失敗,文件寫入到臨時文件夾出錯!
8 沒有上傳該類型文件! //表單中file對象為空
10 上傳失敗,位置錯誤!
相關(guān)文章
PHP調(diào)試函數(shù)和日志記錄函數(shù)分享
這篇文章主要介紹了PHP調(diào)試函數(shù)和日志記錄函數(shù)分享,本文分享的函數(shù)都是自己項目中使用的,需要的朋友可以參考下2015-01-01
php基于PDO實現(xiàn)功能強大的MYSQL封裝類實例
這篇文章主要介紹了php基于PDO實現(xiàn)功能強大的MYSQL封裝類,結(jié)合完整實例形式分析了php基于pdo實現(xiàn)mysql數(shù)據(jù)庫連接、增刪改查、事務(wù)等操作的方法,需要的朋友可以參考下2017-02-02
從一個不錯的留言本弄的mysql數(shù)據(jù)庫操作類
本文通過實例代碼給大家介紹了mysql數(shù)據(jù)庫操作類的相關(guān)知識,感興趣的朋友跟隨腳本之家小編一起看看吧2007-09-09

