PHP 實現文件上傳需三要素:
enctype="multipart/form-data"、method="post"<input type="file" name="userfile">move_uploaded_file($_FILES['userfile']['tmp_name'], $destination)index.php(表單頁):
<?php header('Content-Type:text/html;charset=utf-8'); ?>
<!DOCTYPE html>
<html><head><title>文件上傳表單</title></head><body>
<form action="upload.php" method="post" enctype="multipart/form-data">
文件1:<input name="upload_file1" type="file" /><br/>
文件2:<input name="upload_file2" type="file" /><br/>
<input type="submit" value="上傳" />
</form></body></html>
upload.php(處理頁):
<?php
header('Content-Type:text/html;charset=utf-8');
$first = $_FILES['upload_file1'];
$second = $_FILES['upload_file2'];
$upload_dir = 'D:/upload/';
if ($first['error'] == UPLOAD_ERR_OK) {
move_uploaded_file($first['tmp_name'], $upload_dir . $first['name']);
echo '[文件1]上傳成功!<br/>';
} else { echo '[文件1]上傳失敗!<br/>'; }
if ($second['error'] == UPLOAD_ERR_OK) {
move_uploaded_file($second['tmp_name'], $upload_dir . $second['name']);
echo '[文件2]上傳成功!<br/>';
} else { echo '[文件2]上傳失敗!<br/>'; }
?>
上傳 A.gif、B.gif 後 print_r($_FILES) 輸出:
Array (
[upload_file1] => Array (
[name] => A.gif
[type] => image/gif
[tmp_name] => C:\Windows\Temp\php9803.tmp
[error] => 0
[size] => 87123
)
[upload_file2] => Array ( ... )
)
表單修改為 name="upload_file[]",處理邏輯:
<?php
header('Content-Type:text/html;charset=utf-8');
$fileArray = $_FILES['upload_file']; // 鍵名不含 []
$upload_dir = 'D:/upload/';
foreach ($fileArray['error'] as $key => $error) {
if ($error == UPLOAD_ERR_OK) {
$tmp = $fileArray['tmp_name'][$key];
$name = $fileArray['name'][$key];
move_uploaded_file($tmp, $upload_dir . $name);
echo "上傳[文件$key]成功!<br/>";
} else {
echo "上傳[文件$key]失敗!<br/>";
}
}
?>
此時 $_FILES 結構變為:
Array (
[upload_file] => Array (
[name] => Array ([0]=>A.gif, [1]=>B.gif)
[type] => Array ([0]=>image/gif, [1]=>image/gif)
[tmp_name] => Array ([0]=>..., [1]=>...)
[error] => Array ([0]=>0, [1]=>0)
[size] => Array ([0]=>87123, [1]=>93111)
)
)
php.ini 相關參數(見文末配置表)。iconv() 轉碼。| 指令 | 預設值 | 說明 |
|---|---|---|
| file_uploads | On | 啟用文件上傳 |
| upload_tmp_dir | 系統預設 | 臨時目錄 |
| upload_max_filesize | 2M | 單文件最大值 |
| post_max_size | 8M | POST 最大資料量 |
| max_execution_time | 30 | 最大執行秒數 |
| memory_limit | 8M | 最大內存 |
| max_file_uploads | 20 | 單次最大文件數 |
根據實際需求調整上述參數,重啟 Web 服務生效。