PHP圖片上傳、檔案上傳函式
阿新 • • 發佈:2019-02-13
/**
* [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;
}