1. 程式人生 > >PHP圖片上傳、檔案上傳函式

PHP圖片上傳、檔案上傳函式

/**
 * [file_upload 檔案上傳函式,支援單檔案,多檔案]
 * Author: 程威明
 * @param  string $name         input表單中的name
 * @param  string $save_dir         檔案儲存路徑,相對於當前目錄
 * @param  array  $allow_suffix 允許上傳的檔案字尾
 * @return array                array() {
 *                                         ["status"]=> 全部上傳成功為true,全部上傳失敗為false,部分成功為成功數量
 *                                         ["path"]=>array() {已成功的檔案路徑}
 *                                         ["error"]=>array() {失敗資訊}
 *                                      }
 */
function files_upload($name="photo",$save_dir="images",$allow_suffix=array('jpg','jpeg','gif','png')) { //如果是單檔案上傳,改變陣列結構 if(!is_array($_FILES[$name]['name'])){ $list = array(); foreach($_FILES[$name] as $k=>$v){ $list[$k] = array($v); } $_FILES[$name
] = $list; } $response = array(); $response['status'] = array(); $response['path'] = array(); $response['error'] = array(); //拼接儲存目錄 $save_dir = './'.trim(trim($save_dir,'.'),'/').'/'; //判斷儲存目錄是否存在 if(!file_exists($save_dir)) { //不存在則建立 if(false==mkdir($save_dir
,0777,true)) { $response['status'] = false; $response['error'][] = '檔案儲存路徑錯誤,路徑 "'.$save_dir.'" 建立失敗'; } } $num = count($_FILES[$name]['tmp_name']); $success = 0; //迴圈處理上傳 for($i=0;$i <$num;$i++) { //判斷是不是post上傳 if(!is_uploaded_file($_FILES[$name]['tmp_name'][$i])) { $response['error'][] = '非法上傳,檔案 "'.$_FILES[$name]['name'][$i].'" 不是post獲得的'; continue; } //判斷錯誤 if($_FILES[$name]['error'][$i]>0) { $response['error'][] = '檔案 "'.$_FILES[$name]['name'][$i].'" 上傳錯誤,error下標為 "'.$_FILES[$name]['error'][$i].'"'; continue; } //獲取檔案字尾 $suffix = ltrim(strrchr($_FILES[$name]['name'][$i],'.'),'.'); //判斷後綴是否是允許上傳的格式 if(!in_array($suffix,$allow_suffix)) { $response['error'][] = '檔案 "'.$_FILES[$name]['name'][$i].'" 為不允許上傳的檔案型別'; continue; } //得到上傳後文件名 $new_file_name =date('ymdHis',time()).'_'.uniqid().'.'.$suffix; //拼接完整路徑 $new_path = $save_dir.$new_file_name; //上傳檔案 把tmp檔案移動到儲存目錄中 if(!move_uploaded_file($_FILES[$name]['tmp_name'][$i],$new_path)) { $response['error'][] = '檔案 "'.$_FILES[$name]['name'][$i].'" 從臨時資料夾移動到儲存目錄時傳送錯誤'; continue; } //返回由圖片檔案路徑組成的陣列 $response['path'][] =$save_dir.$new_file_name; $success++; } if(0==$success){ $success = false; }elseif($success==$num){ $success = true; } $response['status'] = $success; return $response; }