PHP中codeigniter檔案上傳類代碼執行個體

來源:互聯網
上載者:User

   codeigniter檔案上傳類代碼執行個體

  檔案上傳類

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

  處理過程

  上傳檔案普遍的過程:

  一個上傳檔案用的表單,允許使用者選擇一個檔案並上傳它。

  當這個表單被提交,該檔案被上傳到指定的目錄。

  同時,該檔案將被驗證是否符合您設定的要求。

  一旦檔案上傳成功,還要返回一個上傳成功的確認視窗。

  這裡有一個簡短的教程來顯示這個過程。此後你將會找到相關的參考資訊。

  建立上傳表單

  運用文字編輯器建立一個名為upload_form.php的檔案,複製以下代碼並儲存在applications/views/目錄裡:

  你會看到這裡運用到了一個表單輔助函數來建立表單的開始標籤,檔案上傳需要一個 multipart form,因為這個表單輔助函數為你建立了一個合適的語句。你還會看到我們運用了一個$error變數,當使用者提交該表單出現錯誤時會顯示相關的出錯資訊。

  上傳成功的頁面

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

  Your file was successfully uploaded!

  $value):?>

  :

  控制器

  運用文字編輯器,建立一個名為upload.php的控制器.複製以下代碼並儲存到applications/controllers/目錄裡:

  load->helper(array('form', 'url')); } function index() { $this->load->view('upload_form', array('error' => ' ' )); } function do_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); if ( ! $this->upload->do_upload()) { $error = array('error' => $this->upload->display_errors()); $this->load->view('upload_form', $error); } else { $data = array('upload_data' => $this->upload->data()); $this->load->view('upload_success', $data); } } } ?>

  上傳檔案目錄

  你還需要一個目標檔案夾來儲存上傳的圖片。在根目錄上建立一個名為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:

  //【如果你在 config檔案夾內的 autoload.php 檔案中自動載入了 upload 類,或者在建構函式內載入了的話,可以調用初始化函數 initialize 來載入設定。————本括弧內由IT不倒翁翻譯,加入了自己的理解】

  $this->upload->initialize($config);

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

  喜好設定參數

  以下喜好設定參數是可用的。當你沒有特別指定喜好設定參數時,預設值如下:

  喜好設定 預設值 選項 描述

  upload_path None None 檔案上傳路徑。該路徑必須是可寫的,相對路徑和絕對路徑均可以。

  allowed_types None None 允許上傳檔案的MIME類型;通常副檔名可以做為MIME類型. 允許多個類型用豎線‘|’分開

  file_name None 想要使用的檔案名稱

  如果設定了這個參數,CodeIgniter 將根據這裡設定的檔案名稱來對上傳的檔案進行重新命名。檔案名稱中的副檔名也必須是允許的檔案類型。

  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時,檔案名稱中的空格將被替換為底線。推薦使用。

  在設定檔裡設定喜好設定參數

  如果你不願意應用如上方法進行喜好設定,你可以用一個設定檔來取代它。簡單建立一個名為upload.php的檔案,添加 $config數組到該檔案裡,然後儲存檔案到:config/upload.php,它將被自動載入。當你把配置參數儲存到該檔案裡,你不需要用$this->upload->initialize函數進行手動載入。

  運用到的函數

  以下函數被運用

  $this->upload->do_upload()

  根據你的偏好配置參數執行操作。注意:預設情況下上傳的檔案來自於提交表單裡名為userfile的檔案域,並且該表單必須是 "multipart"類型:

  如果你想在執行do_upload函數之前自訂自己的檔案網域名稱稱,可通過以下方法實現:

  $field_name = "some_field_name";

  $this->upload->do_upload($field_name)

  $this->upload->display_errors()

  如果do_upload()返回失敗,顯示錯誤資訊。此函數不會自動輸出,而是返回資料,所以你可以按你的要求安排。

  格式化錯誤

  上面的函數預設使用

  標記錯誤資訊。你可以像這樣設定自己的分隔字元。

  $this->upload->display_errors('

  ', '

  ');

  $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

  [client_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"

  )

  解釋

  這裡是對上面數組項的解釋。

  Item Description

  file_name 已上傳的檔案名稱(包括副檔名)

  file_type 檔案的Mime類型

  file_path 不包括檔案名稱的檔案絕對路徑

  full_path 包括檔案名稱在內的檔案絕對路徑

  raw_name 不包括副檔名在內的檔案名稱部分

  orig_name 上傳的檔案最初的檔案名稱。這隻有在設定上傳檔案重新命名(encrypt_name)時才有效。

  client_name 上傳的檔案在用戶端的檔案名稱。

  file_ext 副檔名(包括‘.’)

  file_size 映像大小,單位是kb

  is_image 是否是映像。 1 =是映像。 0 = 不是映像。

  image_width 映像寬度.

  image_height 映像高度

  image_type 檔案類型,即副檔名(不包括‘.’)

  image_size_str 一個包含width和height的字串。用於放在一個img標籤裡。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.