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);