萬盛學電腦網

 萬盛學電腦網 >> 網絡編程 >> php編程 >> PHP中codeigniter文件上傳類代碼實例

PHP中codeigniter文件上傳類代碼實例

   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標簽裡。

copyright © 萬盛學電腦網 all rights reserved