CodeIgniter 使用手冊版本 2.1.4


File Uploading 類別

CodeIgniter 的檔案上傳類允許檔案被上傳。您可以指定上傳某類型的檔案及指定大小的文件。

處理過程

上傳檔案普遍過程:

To demonstrate this process here is brief tutorial. Afterward you'll find reference information.

Creating the Upload Form

使用文字編輯器建立一個表單,該表單命名為 upload_form.php。將底下程式碼寫入檔案,並且另存到您的 applications/views/ 資料夾:

您會發現這裡運用了 Form 補助函數來建立表單,檔案上傳需要一個 multipart form,所以補助函數將幫助您建立合適的語法,您也會發現表單內有 $error 變數,那是用來顯示使用者上傳檔案會遇到的錯誤訊息。

上傳成功的頁面

利用文字編輯器建立一個名為 upload_success.php 的檔案。複製以下程式碼另存到 applications/views/ 目錄裡:

控制器

利用文字編輯器建立一個名為 upload.php 的檔案。複製以下程式碼另存到 applications/controllers/ 目錄裡:

上傳目錄

你還需要一個目錄存儲上傳的圖片。在根目錄上建立一個名稱為 uploads 的目錄並設置該目錄的屬性為 777。(即可讀寫)

重送表單

要傳送表單,輸入類似如下的URL:

example.com/index.php/upload/

你將看到一個上傳表單,任選一張(jpg, gif,或者png)圖片進行上傳. 如果你在控制器裡設定的路徑是正確的,它將開始進行上傳工作。

 

參考指南

初始化文件上傳類別

與 CodeIgniter 的其它一些類別相似,檔案上傳類別用 $this->load->library 函數在控制器裡進行初始化:

$this->load->library('upload');

一旦檔案上傳類別被載入,物件用底下方法來引用:$this->upload

偏好設定

就如同其他類別一樣,您將根據您的偏好設定來控制要被上傳的檔案,在控制器裡,你建立了如下的偏好設定:

$config['upload_path'] = './uploads/';
$config['allowed_types'] = 'gif|jpg|png';
$config['max_size'] = '100';
$config['max_width'] = '1024';
$config['max_height'] = '768';

$this->load->library('upload',$config);

// Alternately you can set preferences by calling the initialize function. Useful if you auto-load the class:
$this->upload->initialize($config);

以上偏好設定將被完全執行。以下是所有偏好設定參數的描述。

偏好設定參數

以下偏好設定都是可以使用。假如您不知道如何設定偏好參數,可以參考底下的預設值

偏好設定 預設值 選項 描述
upload_path None None 檔案目錄上傳路徑,此目錄必須可以寫入,路徑可以是絕對或者是相對。
allowed_types None None 允許上傳文件的 MIME 類型;通常檔案副檔名可以做為 MIME 類型. 允許多個類型用豎線『|』分開。
overwrite FALSE TRUE/FALSE (boolean) 假如設定 TRUE,當您上傳檔案名稱在伺服器端已經有相同檔名的時候,它將會被覆蓋,假如設定 FALSE,CI 會將檔名後面加上數字當區別。
max_size 0 None 允許上傳文件大小的最大值(以K為單位)。該參數為0則不限制。注意:通常PHP也有這項限制,可以在php.ini檔案中設定。通常預設值為2MB。
max_width 0 None 上傳圖片的寬度最大值(像素為單位)。0為不限制。
max_height 0 None 上傳文件的高度最大值(像素為單位)。0為不限制。
max_filename 0 None 檔案名稱的最大長度。0為不限制。
encrypt_name FALSE TRUE/FALSE (boolean) 設定為 TRUE,上傳檔名將會被隨機的加密字串取代,當你想讓使用者不能區分自己上傳的檔案,這是非常有用的,當 overwrite 為 FALSE 時,此選項才起作用。
remove_spaces TRUE TRUE/FALSE (boolean) 參數為 TRUE 的時候,檔名有出現任何空白都會被取代為底線,建議設定為 TRUE。

在 Config 檔案設定偏好值

假如您不喜歡用上述方法來設定偏好,您可以將設定寫入到 config 檔案,簡單建立一個名為 upload.php 的檔案,新增 $config 陣列到該檔案裡,然後另存檔案到:config/upload.php,它將被自動載入。當你把偏好設定存到該檔案裡,你不需要用 $this->upload->initialize 函數進行手動載入。

運用到的函數

以下函數都可以被使用

$this->upload->do_upload()

根據您的偏好設定來執行此函數。注意:在預設狀況下,表單內的上傳檔案欄位是 userfile,而且表單必須是 "multipart 型態:

<form method="post" action="some_action" enctype="multipart/form-data" />

假如您想使用自己定義的欄位名稱,您可以將變數傳入到 do_upload 函數:

$field_name = "some_field_name";
$this->upload->do_upload($field_name)

$this->upload->display_errors()

假如 do_upload() 函數回傳 FALSE,就會顯示錯誤訊息,此函數並不會自動輸出,而是回傳一個變數,您可以依據畫面來擺放顯示的地方。

格式化錯誤

上面的函式默認使用 <p> 標記錯誤訊息。你可以像這樣設定自己的分隔符號:

$this->upload->display_errors('<p>','</p>');

$this->upload->data()

這是一個輔助函數,它回傳您上傳文件的所有相關訊息的陣列。

Array
(
    [file_name]    => mypic.jpg
    [file_type]    => image/jpeg
    [file_path]    => /path/to/your/upload/
    [full_path]    => /path/to/your/upload/jpg.jpg
    [raw_name]     => mypic
    [orig_name]    => mypic.jpg
    [file_ext]     => .jpg
    [file_size]    => 22.2
    [is_image]     => 1
    [image_width]  => 800
    [image_height] => 600
    [image_type]   => jpeg
    [image_size_str] => width="800" height="200"
)

解釋

這裡是對上面陣列選項的解釋。

ItemDescription
file_name 上傳檔案名稱,包含副檔名
file_type 檔案的 Mime 類型
file_path 不包含檔案名稱的上傳絕對路徑
full_path 包含檔案名稱的上傳絕對路徑
raw_name 檔案名稱不包含副檔名
orig_name 上傳檔案最初原始檔名,這只有在設定(encrypt_name)選項有效。
file_ext 檔案副檔名(包含".")
file_size 檔案大小(KB單位)
is_image 檔案是否為圖片。1 = 是. 0 = 否.
image_width 圖片寬度
image_heigth 圖片高度
image_type 圖片類型。就是副檔名(不包含".")
image_size_str 包含寬度跟高度的字串,適用於 image HTML 標籤裡面。