PHP Upload File

PHP: 7.2

在 PHP 當中,可以使用定義好的 $_FILES 處理上傳檔案。

Environment

首先介紹一下在 php.ini 中會影響上傳檔案功能的環境設定。

Attribute Description
file_uploads 是否可以上傳檔案(預設為 On)
upload_max_filesize 上傳檔案的最大限制
max_execution_time 最大執行時間,預設為30秒
memory_limit 記憶體限制
post_max_size POST 的資料量限制

HTML POST

在前端的部份,可以透過 HTML <form> 搭配 <input type="file"> 來上傳檔案。

Notice: 上傳檔案時,記得要將 enctype 改成 multipart/form-data

範例

<form method="POST" action="/upload" enctype="multipart/form-data">
    <input type="file" name="file">
    <button type="submit">送出</button>
</form>

另外,在 input 加入 multiple 屬性就可以一次上傳多個檔案。

<input type="file" name="myfile" multiple/>

$_FILES

在前端傳送檔案到後端之後,可以透過 $_FILES 取得一些資訊:

// 原始檔案名稱
echo $_FILES['myfile']['name'];

// 檔案大小,單位為 Byte
echo $_FILES['myfile']['size'];

// 檔案上傳完畢後,伺服器暫存的位置
echo $_FILES['myfile']['tmp_name'];

// 檔案類型, MIME 格式
echo $_FILES['myfile']['type'];

// 錯誤代碼
echo $_FILES['myfile']['error'];

錯誤代碼的部份,可以查詢 官網

範例

// 分離檔案名稱及副檔名
$fileArr = explode('.', $_FILES['myfile']['name']);

// 取得副檔名
$fileType = $fileArr[count($fileArr) - 1];

// 設定路徑及檔案名稱和副檔名
$destination = '路徑/檔案名稱' . $fileType;

// 透過 move_uploaded_file 將檔案移至設定路徑
move_uploaded_file($_FILES['myfile']['tmp_name'], $destination);
Categories: PHP