You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
85 lines
3.2 KiB
85 lines
3.2 KiB
<?php
|
|
/**
|
|
* string uploadFile(array $files, array $allowExt, number $maxSize, boolean $flag, string $uploadPath) 單一 PHP 檔案上傳
|
|
*
|
|
* @param files 透過 $_FILES 取得的 HTTP 檔案上傳的項目陣列
|
|
* @param allowExt 允許上傳檔案的擴展名,預設 'jpeg', 'jpg', 'gif', 'png'
|
|
* @param maxsize 上傳檔案容量大小限制,預設 2097152(2M * 1024 * 1024 = 2097152byte)
|
|
* @param flag 檢查是否為真實的圖片類型(只允許上傳圖片的話),true(預設)檢查;false 不檢查
|
|
* @param uploadPath 存放檔案的目錄,預設 uploads
|
|
*
|
|
* @return 回傳存放目錄 + md5 產生的檔案名稱 + 擴展名
|
|
*/
|
|
function uploadFile($fileInfo, $allowExt = array('jpeg', 'jpg', 'gif', 'png'), $maxSize = 2097152, $flag = true, $uploadPath = 'uploads') {
|
|
// 存放錯誤訊息
|
|
$mes = '';
|
|
|
|
// 取得上傳檔案的擴展名
|
|
$ext = pathinfo($fileInfo['name'], PATHINFO_EXTENSION);
|
|
|
|
// 確保檔案名稱唯一,防止重覆名稱產生覆蓋
|
|
$uniName = md5(uniqid(microtime(true), true)) . '.' . $ext;
|
|
$destination = $uploadPath . '/' . $uniName;
|
|
|
|
// 判斷是否有錯誤
|
|
if ($fileInfo['error'] > 0) {
|
|
// 匹配的錯誤代碼
|
|
switch ($fileInfo['error']) {
|
|
case 1:
|
|
$mes = '上傳的檔案超過了 php.ini 中 upload_max_filesize 允許上傳檔案容量的最大值';
|
|
break;
|
|
case 2:
|
|
$mes = '上傳檔案的大小超過了 HTML 表單中 MAX_FILE_SIZE 選項指定的值';
|
|
break;
|
|
case 3:
|
|
$mes = '檔案只有部分被上傳';
|
|
break;
|
|
case 4:
|
|
$mes = '沒有檔案被上傳(沒有選擇上傳檔案就送出表單)';
|
|
break;
|
|
case 6:
|
|
$mes = '找不到臨時目錄';
|
|
break;
|
|
case 7:
|
|
$mes = '檔案寫入失敗';
|
|
break;
|
|
case 8:
|
|
$mes = '上傳的文件被 PHP 擴展程式中斷';
|
|
break;
|
|
}
|
|
|
|
return($mes);
|
|
}
|
|
|
|
// 檢查檔案是否是通過 HTTP POST 上傳的
|
|
if (!is_uploaded_file($fileInfo['tmp_name']))
|
|
return('檔案不是通過 HTTP POST 方式上傳的');
|
|
|
|
// 檢查上傳檔案是否為允許的擴展名
|
|
if (!is_array($allowExt)) // 判斷參數是否為陣列
|
|
return('檔案類型型態必須為 array');
|
|
else {
|
|
if (!in_array($ext, $allowExt)) // 檢查陣列中是否有允許的擴展名
|
|
return('非法檔案類型');
|
|
}
|
|
|
|
// 檢查上傳檔案的容量大小是否符合規範
|
|
if ($fileInfo['size'] > $maxSize)
|
|
return('上傳檔案容量超過限制');
|
|
|
|
// 檢查是否為真實的圖片類型
|
|
if ($flag && !@getimagesize($fileInfo['tmp_name']))
|
|
return('不是真正的圖片類型');
|
|
|
|
// 檢查指定目錄是否存在,不存在就建立目錄
|
|
if (!file_exists($uploadPath))
|
|
mkdir($uploadPath, 0777, true); // 建立目錄
|
|
|
|
// 將檔案從臨時目錄移至指定目錄
|
|
if (!@move_uploaded_file($fileInfo['tmp_name'], $destination)) // 如果移動檔案失敗
|
|
return('檔案移動失敗');
|
|
|
|
return $destination;
|
|
}
|
|
|
|
?>
|