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

PHP 多檔案與圖片上傳完整實作指南

     編輯:PHP 相關知識

PHP 多檔案與圖片上傳完整實作指南

HTML 表單:陣列式命名

<form action="mul_upload.php" method="post" enctype="multipart/form-data">
  <input type="hidden" name="MAX_FILE_SIZE" value="1000000">
  選擇檔案1:<input type="file" name="myfile[]"><br>
  選擇檔案2:<input type="file" name="myfile[]"><br>
  選擇檔案3:<input type="file" name="myfile[]"><br>
  <input type="submit" value="上傳檔案">
</form>

關鍵點:name="myfile[]" 使 $_FILES 變為三維陣列。

$_FILES 結構分析

Array(
  [myfile] => Array(
    [name] => Array([0] => Rav.ini, [1] => msgsocm.log, [2] => NOTEPAD.EXE)
    [type] => Array([0] => application/octet-stream, ...)
    [tmp_name] => Array([0] => C:/WINDOWS/Temp/phpAF.tmp, ...)
    [error] => Array([0] => 0, [1] => 0, [2] => 0)
    [size] => Array([0] => 64, [1] => 1350, [2] => 66560)
  )
)

處理上傳迴圈

<?php
for ($i = 0; $i < count($_FILES['myfile']['name']); $i++) {
    if ($_FILES['myfile']['error'][$i] !== UPLOAD_ERR_OK) continue;
    if ($_FILES['myfile']['size'][$i] == 0) continue;
    
    $name = $_FILES['myfile']['name'][$i];
    $tmp = $_FILES['myfile']['tmp_name'][$i];
    $dest = "uploads/" . date('YmdHis') . "_" . $name;
    
    if (move_uploaded_file($tmp, $dest)) {
        echo "檔案 $name 上傳成功<br>";
    } else {
        echo "檔案 $name 上傳失敗<br>";
    }
}
?>

動態增加上傳欄位(JavaScript)

<script>
function AddRow() {
    var row = document.getElementById('tblData').insertRow();
    var cell = row.insertCell();
    cell.innerHTML = "<input type='file' name='filelist[]' size='50'/>";
}
</script>

<form method="post" action="uploadfile.php" enctype="multipart/form-data">
  <table id="tblData">
    <tr><td>檔案上傳列表 <input type="button" onclick="AddRow()" value="添加列表"></td></tr>
    <tr><td><input type="file" name="filelist[]" size="50" /></td></tr>
  </table>
  <input type="submit" name="submitfile" value="提交檔案">
</form>

伺服端處理動態欄位

<?php
if (isset($_POST['submitfile'])) {
    $path = "./" . date('Ym') . "/";
    if (!is_dir($path)) mkdir($path, 0777, true);
    
    for ($i = 0; $i < count($_FILES['filelist']['name']); $i++) {
        if ($_FILES['filelist']['size'][$i] == 0) continue;
        
        $file = $path . date('YmdHis') . "_" . $_FILES['filelist']['name'][$i];
        if (move_uploaded_file($_FILES['filelist']['tmp_name'][$i], $file)) {
            echo "上傳成功: {$_FILES['filelist']['name'][$i]}<br>";
        } else {
            echo "上傳失敗: {$_FILES['filelist']['name'][$i]}<br>";
        }
    }
    echo '<a href="' . $_POST['postadd'] . '">返回</a>';
}
?>

最佳實務

  • 驗證 error 代碼(UPLOAD_ERR_OK = 0)
  • 檢查檔案類型與大小
  • 使用隨機檔名避免衝突
  • 上傳目錄設為不可執行
  • 記錄上傳日誌(用戶、時間、檔名、結果)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved