upload.func.php的代碼<?php /***?? ??? ? 構建上傳文件信息函數?? ?*/function buildInfo(){?? ?if(!$_FILES){?? ??? ?return ;?? ?}?? ?$i=0;?? ?foreach($_FILES as $v){?? ??? ?//如果是單文件?? ??? ?if(is_string($v['name'])){ //判斷$v是一個數字還是字符串 如果是字符串就是 單文件上傳 如果是數組就是多文件上傳?? ??? ??? ?$files[$i]=$v;?? ??? ??? ?$i++;?? ??? ?}else{?? ??? ??? ?//多文件?? ??? ??? ?foreach($v['name'] as $key=>$val){?? ??? ??? ??? ?$files[$i]['name']=$val;?? ??? ??? ??? ?$files[$i]['size']=$v['size'][$key];?? ??? ??? ??? ?$files[$i]['tmp_name']=$v['tmp_name'][$key];?? ??? ??? ??? ?$files[$i]['error']=$v['error'][$key];?? ??? ??? ??? ?$files[$i]['type']=$v['type'][$key];?? ??? ??? ??? ?$i++;?? ??? ??? ?}?? ??? ?}?? ?}?? ?return $files;}/***?? ? uploadFile()文件上傳函數?? ?@param? string? $path 上傳圖片到這個文件夾下?? ?@param? array?? $allowExt? 文件類型數組?? ?@param? string? $maxSize?? 文件大小?? ?@param? boolean $imgFlag?? 判斷是否是真實的圖片文件(沒有改過的文件名后綴)*/function uploadFile($path="uploads",$allowExt=array("gif","jpeg","png","jpg","wbmp"),$maxSize=51200,$imgFlag=true){?? ?if(!file_exists($path)){?? //如果uploads文件夾不存在?? ??? ?mkdir($path,755,true);?? //mkdir() 函數創建目錄。 將默認的訪問權限0777 改為寫入權限755?? ?}?? ?$i=0;?? ?$files=buildInfo();?? //調用文件信息函數 實現單文件和多文件混傳 或者單文件上傳 或者多文件上傳?? ?if(!($files&&is_array($files))){?? ??? ?return ;?? ?}?? ?//判斷錯誤信息?? ?foreach($files as $file){?? ??? ?if($file['error']===UPLOAD_ERR_OK){? //沒有錯誤?? ??? ??? ?$ext=getExt($file['name']);? //得到文件擴展名?? ??? ??? ?//檢測文件的擴展名?? ??? ??? ?if(!in_array($ext,$allowExt)){ ??? ??? ??? ??? ?exit("非法文件類型");?? ??? ??? ?}?? ??? ??? ?//校驗是否是一個真正的圖片類型?? ??? ??? ?if($imgFlag){?? ??? ??? ??? ?//驗證圖片是否是一個真正的圖片類型?? ??? ??? ??? ?//getimagesize()取得 GIF、JPEG 及 PNG 三種 WWW 上圖片的高與寬,?? ??? ??? ??? ?if(!getimagesize($file['tmp_name'])){ ??? ??? ??? ??? ??? ?exit("不是真正的圖片類型");?? ??? ??? ??? ?}?? ??? ??? ?}?? ??? ??? ?//上傳文件的大小?? ??? ??? ?if($file['size']>$maxSize){ //不能大于500kb?? ??? ??? ??? ?exit("上傳文件過大");?? ??? ??? ?}?? ??? ??? ?if(!is_uploaded_file($file['tmp_name'])){ //如果是post上傳?? ??? ??? ??? ?exit("不是通過HTTP POST方式上傳上來的");?? ??? ??? ?}?? ??? ??? ?$filename=getUniName().".".$ext;? //得到文件擴展名?? ??? ??? ?$destination=$path."/".$filename;? //文件路徑?? ??? ??? ?//move_uploaded_file() 函數將上傳的文件移動到新位置。 若成功,則返回 true,否則返回 false。?? ??? ??? ?if(move_uploaded_file($file['tmp_name'], $destination)){?? ??? ??? ??? ?$file['name']=$filename;? //文件名 = 唯一的字符串拼上文件擴展名?? ??? ??? ??? ?unset($file['tmp_name'],$file['size'],$file['type']);? //銷毀無用的文件信息?? ??? ??? ??? ?$uploadedFiles[$i]=$file;?? ??? ??? ??? ?$i++;?? ??? ??? ?}?? ??? ?}else{?? ??? ??? ?switch($file['error']){?? ??? ??? ??? ??? ?case 1:?? ??? ??? ??? ??? ??? ?$mes="超過了配置文件上傳文件的大小";//UPLOAD_ERR_INI_SIZE?? ??? ??? ??? ??? ??? ?break;?? ??? ??? ??? ??? ?case 2:?? ??? ??? ??? ??? ??? ?$mes="超過了表單設置上傳文件的大小";?? ??? ??? ?//UPLOAD_ERR_FORM_SIZE?? ??? ??? ??? ??? ??? ?break;?? ??? ??? ??? ??? ?case 3:?? ??? ??? ??? ??? ??? ?$mes="文件部分被上傳";//UPLOAD_ERR_PARTIAL?? ??? ??? ??? ??? ??? ?break;?? ??? ??? ??? ??? ?case 4:?? ??? ??? ??? ??? ??? ?$mes="沒有文件被上傳1111";//UPLOAD_ERR_NO_FILE?? ??? ??? ??? ??? ??? ?break;?? ??? ??? ??? ??? ?case 6:?? ??? ??? ??? ??? ??? ?$mes="沒有找到臨時目錄";//UPLOAD_ERR_NO_TMP_DIR?? ??? ??? ??? ??? ??? ?break;?? ??? ??? ??? ??? ?case 7:?? ??? ??? ??? ??? ??? ?$mes="文件不可寫";//UPLOAD_ERR_CANT_WRITE;?? ??? ??? ??? ??? ??? ?break;?? ??? ??? ??? ??? ?case 8:?? ??? ??? ??? ??? ??? ?$mes="由于PHP的擴展程序中斷了文件上傳";//UPLOAD_ERR_EXTENSION?? ??? ??? ??? ??? ??? ?break;?? ??? ??? ??? ?}?? ??? ??? ??? ?echo $mes;?? ??? ??? ?}?? ?}?? ?return $uploadedFiles;}?? ?//服務器端PHP配置文件?? ?//file_uploads=On?? 支持通過HTTP POST方式上傳文件?? ?//upload_tmp_dir="E:\xampp\tmp"? 臨時文件保存的路徑?? ?//max_file_uploads=20?? 表單上傳的文件的最大大小默認為2M?? ?//post_max_size=8M?? ?? 表單已post方式發送數據的最大值默認是8M?? ??? ??? ?//客戶端進行配置?? ?//<input type="hidden" name="MAX_FILE_SIZE" value="1024"/>?>/////////////////////////////////////image.func.php文件的代碼<?php?? ?require_once '../include.php'; //包含字符串處理文件?? ??? ??? ?/***?? ?? @param? $sess_name session中保存驗證碼的名字?? ?? @param? $type? 驗證碼類型?? ?? @param? $length? 驗證碼長度?? ?? @param? $pixel?? 默認需不需要干擾元素 true需要 false不需要?? ? */?? ?function verifyImage($type=1,$length=4,$sess_name = 'verify'){?? ??? ?$chars = bulidRandomString(1,4);? //調用隨機數函數?? ??? ?$_SESSION[$sess_name] = $chars;?? ??? ?echo $_SESSION[$sess_name];?? ?}?? ??? ?/***?? ? *? 生成縮略圖函數thumb()?? ??? ?@param? string? $filename 傳入的圖像?? ??? ?@param? string? $destination 文件夾?? ??? ?@param? int? $dst_w 畫布寬?? ??? ?@param? int? $dst_h 畫布高?? ??? ?@param? boolean? $isReservedSource 是否刪除原文件?? ??? ?@param? number? $scale 縮放比例?? ??? ?return? string $dstFilename?? 返回文件名?? ?*/?? ?function thumb($filename,$destination=null,$dst_w=null,$dst_h=null,$isReservedSource=true,$scale=0.5){?? ??? ?//得到原圖像的寬高和類型 賦值給變量$src_w,$src_h,$imagetype?? ??? ?list($src_w,$src_h,$imagetype) = getimagesize($filename);?? ??? ?//如果沒有傳比例就用默認的縮放比例?? ??? ?//$scale=0.5; //默認的縮放比例?? ??? ?//is_null 檢測是否為空?? ??? ?if(is_null($dst_w)||is_null($dst_h)){?? ??? ??? ?$dst_w=ceil($src_w*$scale);? //新圖像寬=原圖像寬乘以縮放比例?? ??? ??? ?$dst_h=ceil($src_h*$scale);? //新圖像高=原圖像高乘以縮放比例?? ??? ?}?? ??? ?//image_type_to_mime_type — 取得 getimagesize,exif_read_data,exif_thumbnail,exif_imagetype 所返回的圖像類型的 MIME 類型 返回文件類型?? ??? ?$mime = image_type_to_mime_type($imagetype);?? ??? ?$createFun = str_replace("/", "createfrom", $mime);? //$createFun = imagecreatefromjpeg?? ??? ?$outFun = str_replace("/",null,$mime);?? ??? ??? ??? ? //$outFun = imagejpeg?? ??? ?//imagecreatetruecolor 新建一個畫布資源?? ??? ?$src_image = $createFun($filename);? //創建原圖像資源?? ??? ?//imagecreatetruecolor 新建一個畫布資源?? ??? ?$dst_image = imagecreatetruecolor($dst_w, $dst_h);?? ??? ?/***?? ??? ? *? 重采樣圖片并拷貝??
??? ??? ?bool imagecopyresampled ( resource $dst_image , resource
$src_image , int $dst_x , int $dst_y , int $src_x , int $src_y , int
$dst_w , int $dst_h , int $src_w , int $src_h )?? ??? ??? ?$dst_image:新建的圖片?? ??? ??? ?$src_image:需要載入的圖片?? ??? ??? ?$dst_x:設定需要載入的圖片在新圖中的x坐標?? ??? ??? ?$dst_y:設定需要載入的圖片在新圖中的y坐標?? ??? ??? ?$src_x:設定載入圖片要載入的區域x坐標?? ??? ??? ?$src_y:設定載入圖片要載入的區域y坐標?? ??? ??? ?$dst_w:設定載入的原圖的寬度(在此設置縮放)?? ??? ??? ?$dst_h:設定載入的原圖的高度(在此設置縮放)?? ??? ??? ?$src_w:原圖要載入的寬度?? ??? ??? ?$src_h:原圖要載入的高度?? ??? ??? ?imagecopyresampled()用來改變圖像大小?? ??? ?*/?? ??? ?imagecopyresampled($dst_image, $src_image, 0, 0, 0, 0, $dst_w, $dst_h, $src_w, $src_h);?? ??? ?//file_exists() 函數檢查文件或目錄是否存在?? ??? ?//dirname() 函數返回路徑中的目錄部分。?? ??? ?/***?? ??? ??? ?mkdir() 函數創建目錄。?? ??? ??? ?mkdir(path,mode,recursive,context)?? ??? ??? ?path?? ?必需。規定要創建的目錄的名稱。?? ??? ??? ?mode?? ?必需。規定權限。默認是 0777。 改為755文件可寫?? ??? ??? ??? ??? ?*/?? ??? ?if($destination&&!file_exists(dirname($destination))){ //如果文件存在? 目錄也不存在?? ??? ??? ?mkdir(dirname($destination),755,true); //創建目錄?? ??? ?}?? ??? ?//getUniName()生成唯一字符串函數.文件擴展名?? ??? ?$dstFilename = $destination==null?getUniName().".".getExt($filename):$destination;?? ??? ?$outFun($dst_image,$dstFilename); ?? ??? ?imagedestroy($src_image); //銷毀原圖像?? ??? ?imagedestroy($dst_image); //銷毀新圖像?? ??? ?//$isReservedSource = false; //默認不保留原文件?? ??? ?if(!$isReservedSource){ //如果不需要保留原文件?? ??? ??? ?unlink($filename);? //刪除原文件?? ??? ?}?? ??? ?return $dstFilename;? //返回文件名?? ?}?>
- 1 回答
- 0 關注
- 2003 瀏覽
添加回答
舉報
0/150
提交
取消