封裝好的php上傳文件類(lèi),具體代碼如下:
class FileUpload {
private $filepath; //指定上傳文件保存的路徑
private $allowtype=array('gif', 'jpg', 'png', 'jpeg'); //充許上傳文件的類(lèi)型
private $maxsize=1000000; //允上傳文件的最大長(zhǎng)度 1M
private $israndname=true; //是否隨機(jī)重命名, false不隨機(jī),使用原文件名
private $originName; //源文件名稱(chēng)
private $tmpFileName; //臨時(shí)文件名
private $fileType; //文件類(lèi)型
private $fileSize; //文件大小
private $newFileName; //新文件名
private $errorNum=0; //錯(cuò)誤號(hào)
private $errorMess=""; //用來(lái)提供錯(cuò)誤報(bào)告
//用于對(duì)上傳文件初使化
//1. 指定上傳路徑, 2,充許的類(lèi)型, 3,限制大小, 4,是否使用隨機(jī)文件名稱(chēng)
//讓用戶可以不用按位置傳參數(shù),后面參數(shù)給值不用將前幾個(gè)參數(shù)也提供值
function __construct($options=array()){
foreach($options as $key=>$val){
$key=strtolower($key);
//查看用戶參數(shù)中數(shù)組的下標(biāo)是否和成員屬性名相同
if(!in_array($key,get_class_vars(get_class($this)))){
continue;
}
$this->setOption($key, $val);
}
}
private function getError(){
$str="上傳文件<font color='red'>{$this->originName}</font>時(shí)出錯(cuò):";
switch($this->errorNum){
case 4: $str .= "沒(méi)有文件被上傳"; break;
case 3: $str .= "文件只被部分上傳"; break;
case 2: $str .= "上傳文件超過(guò)了HTML表單中MAX_FILE_SIZE選項(xiàng)指定的值"; break;
case 1: $str .= "上傳文件超過(guò)了php.ini 中upload_max_filesize選項(xiàng)的值"; break;
case -1: $str .= "末充許的類(lèi)型"; break;
case -2: $str .= "文件過(guò)大,上傳文件不能超過(guò){$this->maxSize}個(gè)字節(jié)"; break;
case -3: $str .= "上傳失敗"; break;
case -4: $str .= "建立存放上傳文件目錄失敗,請(qǐng)重新指定上傳目錄"; break;
case -5: $str .= "必須指定上傳文件的路徑"; break;
default: $str .= "末知錯(cuò)誤";
}
return $str.'<br>';
}
//用來(lái)檢查文件上傳路徑
private function checkFilePath(){
if(empty($this->filepath)) {
$this->setOption('errorNum', -5);
return false;
}
if(!file_exists($this->filepath) || !is_writable($this->filepath)){
if(, 0755)){
$this->setOption('errorNum', -4);
return false;
}
}
return true;
}
//用來(lái)檢查文件上傳的大小
private function checkFileSize() {
if($this->fileSize > $this->maxsize){
$this->setOPtion('errorNum', '-2');
return false;
}else{
return true;
}
}
//用于檢查文件上傳類(lèi)型
private function checkFileType() {
if(in_array(strtolower($this->fileType), $this->allowtype)) {
return true;
}else{
$this->setOption('errorNum', -1);
return false;
}
}
//設(shè)置上傳后的文件名稱(chēng)
private function setNewFileName(){
if($this->israndname){
$this->setOption('newFileName', $this->proRandName());
} else {
$this->setOption('newFileName', $this->originName);
}
}
//設(shè)置隨機(jī)文件名稱(chēng)
private function proRandName(){
$fileName=date("YmdHis").rand(100,999);
return $fileName.'.'.$this->fileType;
}
private function setOption($key, $val){
$this->$key=$val;
}
//用來(lái)上傳一個(gè)文件
function uploadFile($fileField){
$return=true;
//檢查文件上傳路徑
if(!$this->checkFilePath()){
$this->errorMess=$this->getError();
return false;
}
$name=$_FILES[$fileField]['name'];
$tmp_name=$_FILES[$fileField]['tmp_name'];
$size=$_FILES[$fileField]['size'];
$error=$_FILES[$fileField]['error'];
if(is_Array($name)){
$errors=array();
for($i=0; $i<count($name); $i++){
if($this->setFiles($name[$i], $tmp_name[$i], $size[$i], $error[$i])){
if(!$this->checkFileSize() || !$this->checkFileType()){
$errors[]=$this->getError();
$return=false;
}
}else{
$error[]=$this->getError();
$return=false;
}
if(!$return)
$this->setFiles();
}
if($return){
$fileNames=array();
for($i=0; $i<count($name); $i++){
if($this->setFiles($name[$i], $tmp_name[$i], $size[$i], $error[$i])){
$this->setNewFileName();
if(!$this->copyFile()){
$errors=$this->getError();
$return=false;
}else{
$fileNames[]=$this->newFileName;
}
}
}
$this->newFileName=$fileNames;
}
$this->errorMess=$errors;
return $return;
} else {
if($this->setFiles($name, $tmp_name, $size, $error)){
if($this->checkFileSize() && $this->checkFileType()){
$this->setNewFileName();
if($this->copyFile()){
return true;
}else{
$return=false;
}
}else{
$return=false;
}
}else{
$return=false;
}
if(!$return)
$this->errorMess=$this->getError();
return $return;
}
}
private function copyFile(){
if(!$this->errorNum){
$filepath=rtrim($this->filepath, '/').'/';
$filepath.=$this->newFileName;
if(@move_uploaded_file($this->tmpFileName, $filepath)) {
return true;
}else{
$this->setOption('errorNum', -3);
return false;
}
}else{
return false;
}
}
//設(shè)置和$_FILES有關(guān)的內(nèi)容
private function setFiles($name="", $tmp_name='', $size=0, $error=0){
$this->setOption('errorNum', $error);
if($error){
return false;
}
$this->setOption('originName', $name);
$this->setOption('tmpFileName', $tmp_name);
$arrStr=explode('.', $name);
$this->setOption('fileType', strtolower($arrStr[count($arrStr)-1]));
$this->setOption('fileSize', $size);
return true;
}
//用于獲取上傳后文件的文件名
function getNewFileName(){
return $this->newFileName;
}
//上傳如果失敗,則調(diào)用這個(gè)方法,就可以查看錯(cuò)誤報(bào)告
function getErrorMsg() {
return $this->errorMess;
}
}
更多信息請(qǐng)查看IT技術(shù)專(zhuān)欄