:::

5. 檔案上傳

一、表單的上傳設定

  1. 若表單中有file元件,其表單一定要加上:
    <from ...略... enctype="multipart/form-data">
     
  2.  記得建立一個資料夾,例如:uploads(linux下權限記得設定為777)

二、單檔上傳

  1. 假設 file欄位名稱為 files,如(先將[]multiple 拿掉,也就是只上傳一個檔):
    <input type="file" name="files" id="files" class="form-control" placeholder="請上傳相片或影片"
      accept=".jpg,.jpeg,.png,.gif,.mp4" />

     

  2. 如此會產生一組 $_FILES 超級全域變數(二維陣列):
    • $_FILES['files']['name']:上傳檔案原始名稱。
    • $_FILES['files']['type']:檔案的 MIME 類型,例如“image/gif”。
    • $_FILES['files']['size']:已上傳檔案的大小,單位為bytes。
    • $_FILES['files']['tmp_name']:檔案被上傳後的臨時檔案名。
    • $_FILES['files']['error']:和該檔案上傳相關的錯誤代碼。
  3. 上傳的步驟:送出上傳→檔案會暫時放到tmp中→程式要搬移該檔到指定的位置。
  4. 搬移上傳檔方法:
    move_uploaded_file($_FILES['files']['tmp_name'], 新路徑檔名);

    例如:

    <?php
    require_once '../header.php';
    
    // 寫入資料庫
    ...略...
    
    // 取得該資料的流水號
    $id = $db->lastInsertId();
    
    // 檢查檔案是否上傳成功
    if ($_FILES['files']['error'] === UPLOAD_ERR_OK) {
    
        // 讓檔案放在文章編號的目錄下,比較方便管理,檢查有無該目錄
        if (!is_dir(_PATH . "/uploads/{$id}")) {
            // 若無建立原檔目錄
            mkdir(_PATH . "/uploads/{$id}");
            // 順便建立縮圖目錄
            mkdir(_PATH . "/uploads/{$id}/thumbs");
        }
    
        // 暫存檔來源
        $file = $_FILES['files']['tmp_name'];
        // 欲放置到哪裡
        $dest = _PATH . "/uploads/{$id}/{$_FILES['files']['name']}";
    
        // 將檔案移至指定位置
        if (!move_uploaded_file($file, $dest)) {
            die("無法將檔案{$file}上傳至指定位置{$dest}");
        }
    
    } else {
        die("上傳錯誤:{$_FILES['files']['error']}");
    }
    
    //執行後轉向
    header("location: ../admin.html");
    exit;
    

     

    1.  UPLOAD_ERR_OK是一個常數,其值為 0,所以,實際上直接寫 0 也行,代表沒有錯誤可以繼續執行底下動作的意思
    2. is_dir() 用來判斷有無該資料夾,mkdir()則是建立資料夾
  5. 可以實際測試一下:
  6. 應該會在uploads下資料夾看到檔案已經上傳:

:::

書籍目錄

展開 | 闔起

https%3A%2F%2Fcampus-xoops.tn.edu.tw%2Fmodules%2Ftad_book3%2Fpage.php%3Ftbsn%3D52%26tbdsn%3D1811

計數器

今天: 4059405940594059
昨天: 5069506950695069
總計: 5134507513450751345075134507513450751345075134507