以下是自己練習php文件上傳時的代碼,僅供參考學習
upload.php
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>多文件上傳</title></head><body> <form action="doAction2.php" method="post" enctype="multdoAction.php<?php //common.func.php<?php/** * 得到文件擴展名 */ function getExt($filename){ return strtolower(pathinfo($filename,PATHINFO_EXTENSION)); }/** * 得到唯一的文件名 */ function getUniqname(){ return md5(uniqid(microtime(true),true)); }upload.func.php
<?php/** * 構建上傳文件的信息 */function getFiles(){ //多文件時,獲得的數據是個三維數組,需要拆分才一一對應的數據 $i=0; foreach($_FILES as $file){ //判斷是不是多文件,還是二維數組 if(is_string($file['name'])){ $files[$i] = $file; $i++; }elseif(is_array($file['name'])){ foreach ($file['name'] as $key => $value) { $files[$i]['name'] = $file['name'][$key]; $files[$i]['type'] = $file['type'][$key]; $files[$i]['tmp_name'] = $file['tmp_name'][$key]; $files[$i]['error'] = $file['error'][$key]; $files[$i]['size'] = $file['size'][$key]; $i++; } } } return $files;}/** * 針對于單文件、多個單文件、多文件的上傳 * @param array $fileInfo * @param string $path * @param string $flag * @param number $maxSize * @param array $allowExt * @return string */function uploadFile($fileInfo,$path='./uploads',$flag=true,$maxSize=2097152,$allowExt=array('jpg','jpeg','gif','png')){ /*$allowExt = array('jpg','jpeg','gif','png'); $flag = true; $maxSize = 2097152; //自定義2M*/ //判斷錯誤號 if($fileInfo['error']===0){ //檢測上傳文件大小 if($fileInfo['size']>$maxSize){ $res['mes'] = $fileInfo['name'].'上傳文件過大'; } //檢測上傳文件的類型 $ext = getExt($fileInfo['name']); if(!in_array($ext,$allowExt)){ $res['mes'] = $fileInfo['name'].'非法文件類型'; } //檢測是否是真實的圖片類型 if($flag){ if(!getimagesize($fileInfo['tmp_name'])){ $res['mes'] = $fileInfo['name'].'不是真實的圖片類型'; } } //檢測是否從HTTP POST表單上傳 if(!is_uploaded_file($fileInfo['tmp_name'])){ $res['mes'] = $fileInfo['name'].'文件不是通過POST方式上傳的'; } if(!empty($res)){ return $res; } //開始移動臨時文件到指定的文件位置 /*$path = './uploads';*/ if(!file_exists($path)){ mkdir($path,0777,true); chmod($path,0777); } $uniqName = getUniqname(); $destination = $path.'/'.$uniqName.'.'.$ext; if(!move_uploaded_file($fileInfo['tmp_name'],$destination)){ $res['mes'] = $fileInfo['name'].'文件移動失敗'; } $res['mes']=$fileInfo['name'].'上傳成功'; $res['dest']=$destination; return $res; }else{ //匹配錯誤信息 switch ($fileInfo['error']) { case 1: $res['mes'] = '上傳的文件超過了服務端配置中upload_max_filesize選項限制的值'; break; case 2: $res['mes'] = '上傳的文件超過了HTML表單POST中MAX_FILE_SIZE選項限制的值'; break; case 3: $res['mes'] = '文件只有部分被上傳'; break; case 4: $res['mes'] = '沒有文件被上傳'; break; case 6: $res['mes'] = '找不到臨時的文件夾'; break; case 7: case 8: $res['mes'] = '系統文件錯誤'; break; } return $res; }}新聞熱點
疑難解答
圖片精選