2013年8月24日 星期六

PHP - upload file

file_uploads = On
upload_tmp_dir = "C:\Windows\Temp"     [ = "tmp"    Linux]


  1. <form action="接收檔.php" method="post" enctype="multipart/form-data">  [傳送資料的編碼方式]
  2. 單一/多檔 上傳
    1. <input type="file" name="fileUpload">
    2. <input type="file" name="fileUpload[ ]">
  3. 暫存檔資訊
    1. $_FILES["欄位名稱"]["tmp_name"]   取得暫存檔名稱
    2. $_FILES["欄位名稱"]["name"]   取得原本名稱
    3. $_FILES["欄位名稱"]["type"]   取得檔案類型[text/plain]、[image/pjpeg]
    4. $_FILES["欄位名稱"]["size"]   取得檔案大小
    5. $_FILES["欄位名稱"]["error"]   取得錯誤碼
      • [ 0 ]UPLOAD_ERR_OK 上傳成功
      • [ 1 ]UPLOAD_ERR_INI_SIZE 檔案大於<php.ini>中設定upload_max_filesize的最大上傳檔案大小
      • [ 2 ]UPLOAD_ERR_FROM_SIZE 檔案大於表單(form)能傳送的大小MAX_FILE-SIZE
      • [ 3 ]UPLOAD_ERR_PARTIAL 只有部分檔案被上傳
      • [ 4 ]UPLOAD_ERR_NO_FILE 檔案沒有被上傳
      • [ 5 ]UPLOAD_ERR_NO_TMP_DIR 沒有設定/找不到  暫存檔案夾
      • [ 6 ]UPLOAD_ERR_CANT_WRITE 檔案寫入磁碟失敗
  4. move_upload_file( 暫存檔名稱, 目的路徑及檔名 )       "./".FILES[ ][ ]
  5. 多檔   二維陣列    $_FILES["欄位名稱"]["tmp_name"][$i]       
    1. 一維:$_FILES["欄位名稱"]["tmp_name"]     
    2. 二維:[$i]





  • 注意表單 form 需要加上 enctype="multipart/form-data" 代表你要上傳檔案
  • utf-8 編碼網頁無法在 big5 系統正確處理中文檔名,原因在於 move_uploaded_file() 不能處理 utf-8 中文編碼,需利用 iconv() 函數作轉碼,解決方法如下:
    • 請將
    • move_uploaded_file($_FILES['myfile']['tmp_name'], $uploadfile)
    • 改為
    • move_uploaded_file($_FILES['myfile']['tmp_name'], iconv("utf-8", "big5", $uploadfile))
參考資料:


沒有留言:

張貼留言