首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 實現文件上傳與多文件上傳完整教程

     編輯:PHP 相關知識

基礎上傳流程

PHP 實現文件上傳需三要素:

  1. 表單 enctype="multipart/form-data"、method="post"
  2. <input type="file" name="userfile">
  3. 服務端 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/>'; }
?>

$_FILES 結構詳解

上傳 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() 轉碼。

php.ini 關鍵上傳配置

指令預設值說明
file_uploadsOn啟用文件上傳
upload_tmp_dir系統預設臨時目錄
upload_max_filesize2M單文件最大值
post_max_size8MPOST 最大資料量
max_execution_time30最大執行秒數
memory_limit8M最大內存
max_file_uploads20單次最大文件數

根據實際需求調整上述參數,重啟 Web 服務生效。

您可能感興趣的文章:

  • PHP 上傳文件大小限制
  • PHP 文件上傳後綴名與文件類型對照表
  • PHP 圖片文件上傳實現代碼
  • PHP 中關於普通表單多文件上傳的處理方法
  • PHP 文件上傳類代碼
  • php.ini 修改 PHP 上傳文件大小限制的方法詳解
  • PHP jQuery 多文件上傳簡單實例
  • PHP 多文件上傳實現代碼
  • PHP 多文件上傳下載示例分享
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved