?
This document uses PHP Chinese website manual Release
CodeIgniter的文件上傳類允許上傳文件。您可以設(shè)置各種首選項(xiàng),限制文件的類型和大小。
過程
創(chuàng)建上傳表單
成功頁面
控制器
上傳目錄
嘗試一下!
參考指南
初始化上傳類
設(shè)置首選項(xiàng)
優(yōu)先
在配置文件中設(shè)置首選項(xiàng)
類參考
上傳文件涉及以下一般過程:
顯示上傳表單,允許用戶選擇文件并上傳。
提交表單時,文件將上傳到您指定的目的地。
一路上,文件被驗(yàn)證,以確保它被允許根據(jù)您設(shè)置的偏好進(jìn)行上傳。
一旦上傳,用戶將被顯示成功消息。
為了演示這個過程,這里是簡短的教程。之后你會找到參考信息。
使用文本編輯器創(chuàng)建一個名為upload_form.php的表單。在這里,放置這段代碼并保存到你的application / views /目錄中:
<html><head><title>Upload Form</title></head><body><?php echo $error;?><?php echo form_open_multipart('upload/do_upload');?><input type="file" name="userfile" size="20" /><br /><br /><input type="submit" value="upload" /></form></body></html>
您會注意到我們正在使用表單助手來創(chuàng)建開始表單標(biāo)記。文件上傳需要多部分形式,所以助手會為你創(chuàng)建合適的語法。您還會注意到我們有一個$ error變量。這樣我們可以在用戶做錯事情時顯示錯誤消息。
使用文本編輯器創(chuàng)建一個名為upload_success.php的表單。在這里,放置這段代碼并保存到你的application / views /目錄中:
<html><head><title>Upload Form</title></head><body><h3>Your file was successfully uploaded!</h3><ul><?php foreach ($upload_data as $item => $value):?><li><?php echo $item;?>: <?php echo $value;?></li><?php endforeach; ?></ul><p><?php echo anchor('upload', 'Upload Another File!'); ?></p></body></html>
使用文本編輯器創(chuàng)建一個名為Upload.php的控制器。在它中,放置這些代碼并將其保存到您的應(yīng)用程序/ controllers /目錄中:
<?phpclass Upload extends CI_Controller { public function __construct() { parent::__construct(); $this->load->helper(array('form', 'url')); } public function index() { $this->load->view('upload_form', array('error' => ' ' )); } public 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('userfile')) { $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); } }}?>
您需要上傳圖片的目標(biāo)目錄。在CodeIgniter安裝的根目錄創(chuàng)建一個名為uploads的目錄,并將其文件權(quán)限設(shè)置為777。
要嘗試表單,請使用類似下面的網(wǎng)址訪問您的網(wǎng)站:
example.com/index.php/upload/
你應(yīng)該看到一個上傳表單。嘗試上傳圖片文件(JPG,GIF或PNG)。如果你的控制器中的路徑是正確的,它應(yīng)該工作。
像CodeIgniter中的大多數(shù)其他類一樣,Upload類在您的控制器中使用以下$this->load->library()
方法進(jìn)行初始化:
$this->load->library('upload');
一旦加載了Upload類,該對象將可以使用:$ this-> upload
與其他圖書館類似,您可以根據(jù)自己的偏好控制允許上傳的內(nèi)容。在上面構(gòu)建的控制器中,設(shè)置了以下偏好設(shè)置:
$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()`` method. Useful if you auto-load the class:$this->upload->initialize($config);
上述偏好應(yīng)該是不言自明的。以下是描述所有可用偏好的表格。
以下偏好是可用的。默認(rèn)值表示如果不指定該首選項(xiàng)將使用的內(nèi)容。
Preference | 默認(rèn)值 | 選項(xiàng) | 描述 |
---|---|---|---|
upload_path | 沒有 | 沒有 | 應(yīng)該放置上傳目錄的路徑。該目錄必須是可寫的,路徑可以是絕對路徑或相對路徑。 |
allowed_types | 沒有 | 沒有 | MIME類型對應(yīng)于您允許上傳的文件類型。通常文件擴(kuò)展名可以用作MIME類型??梢允菙?shù)組或管道分隔的字符串。 |
文件名 | 沒有 | 所需的文件名 | 如果設(shè)置CodeIgniter會將上傳的文件重命名為該名稱。文件名中提供的擴(kuò)展名也必須是允許的文件類型。如果沒有提供原始文件名的擴(kuò)展名將被使用。 |
file_ext_tolower | 假 | TRUE / FALSE(布爾) | 如果設(shè)置為TRUE,文件擴(kuò)展名將被強(qiáng)制為小寫 |
overwrite | 假 | TRUE / FALSE(布爾) | 如果設(shè)置為true,如果存在與正在上傳的文件同名的文件,則該文件將被覆蓋。如果設(shè)置為false,如果存在另一個具有相同名稱的文件,則會在文件名后附加一個數(shù)字。 |
MAX_SIZE | 0 | 沒有 | 文件的最大大小(以千字節(jié)為單位)。無限制設(shè)置為零。注意:大多數(shù)PHP安裝都有自己的限制,正如在php.ini文件中指定的那樣。通常默認(rèn)2 MB(或2048 KB)。 |
MAX_WIDTH | 0 | 沒有 | 圖像可以是的最大寬度(以像素為單位)。無限制設(shè)置為零。 |
最大高度 | 0 | 沒有 | 圖像的最大高度(以像素為單位)。無限制設(shè)置為零。 |
MIN_WIDTH | 0 | 沒有 | 圖像可以是的最小寬度(以像素為單位)。無限制設(shè)置為零。 |
MIN_HEIGHT | 0 | 沒有 | 圖像可能的最小高度(以像素為單位)。無限制設(shè)置為零。 |
max_filename | 0 | 沒有 | 文件名的最大長度。無限制設(shè)置為零。 |
max_filename_increment | 100 | 沒有 | 當(dāng)覆蓋設(shè)置為FALSE時,使用它來設(shè)置CodeIgniter追加到文件名的最大文件名增量。 |
encrypt_name | 假 | TRUE / FALSE(布爾) | 如果設(shè)置為TRUE,文件名將被轉(zhuǎn)換為隨機(jī)加密的字符串。如果您希望使用名稱無法識別的文件來保存文件,這會非常有用。 |
remove_spaces | 真 | TRUE / FALSE(布爾) | 如果設(shè)置為TRUE,則文件名中的任何空格將轉(zhuǎn)換為下劃線。這是推薦的。 |
detect_mime | 真 | TRUE / FALSE(布爾) | 如果設(shè)置為TRUE,則將執(zhí)行服務(wù)器端文件類型檢測以避免代碼注入攻擊。不要禁用此選項(xiàng),除非您沒有其他選擇,否則會導(dǎo)致安全風(fēng)險。 |
mod_mime_fix | 真 | TRUE / FALSE(布爾) | 如果設(shè)置為TRUE,多個文件擴(kuò)展名后面會加下劃線,以避免觸發(fā)Apache mod_mime。如果您的上傳目錄是公開的,請不要關(guān)閉此選項(xiàng),因?yàn)檫@存在安全風(fēng)險。 |
如果您不想使用上述方法設(shè)置首選項(xiàng),則可以將它們放入配置文件中。只需創(chuàng)建一個名為upload.php的新文件,在該文件中添加$ config數(shù)組。然后將該文件保存在:config / upload.php中,并自動使用。如果將$this->upload->initialize()
首選項(xiàng)保存在配置文件中,則不需要使用該方法。
class CI_Uploadinitialize([array $config = array()[, $reset = TRUE]])
參數(shù): | $ config(array) - 首選項(xiàng)$ reset(bool) - 是否將首選項(xiàng)(不在$ config中提供)重置為默認(rèn)值 |
---|---|
返回: | CI_Upload實(shí)例(方法鏈) |
返回類型: | CI_Upload |
$ config(數(shù)組) - 首選項(xiàng)
$ reset(bool) - 是否將首選項(xiàng)(不在$ config中提供)重置為默認(rèn)值
返回:CI \ _Upload實(shí)例(方法鏈接)
Return type: CI\_Upload
do_upload([$field = 'userfile'])
參數(shù): | $ field(string) - 表單字段的名稱 |
---|---|
返回: | 成功為TRUE,失敗為FALSE |
返回類型: | 布爾 |
$ field(string) - 表單字段的名稱
返回:成功時為TRUE,失敗時為FALSE
返回類型:布爾值
根據(jù)您設(shè)定的偏好執(zhí)行上傳。
注意
默認(rèn)情況下,上傳例程期望文件來自稱為userfile的表單字段,并且表單必須是“multipart”類型。
<form method="post" action="some\_action" enctype="multipart/form-data" />
如果您想設(shè)置自己的字段名稱,只需將其值傳遞給do_upload()
方法:
$field_name = "some_field_name"; $this->upload->do_upload($field_name);
display_errors([$open = '<p>'[, $close = '</p>']])
參數(shù): | $ open(string) - 打開標(biāo)記$ close(string) - 關(guān)閉標(biāo)記 |
---|---|
返回: | 格式化的錯誤信息(s) |
返回類型: | 串 |
$ open(string) - 打開標(biāo)記
$ close(string) - 關(guān)閉標(biāo)記
返回:格式錯誤消息(s)
返回類型:字符串
如果`do_upload()`方法返回false,則檢索任何錯誤消息。該方法不會自動回顯,它會返回數(shù)據(jù),以便您根據(jù)需要分配數(shù)據(jù)。
格式錯誤
默認(rèn)情況下,上面的方法包含<p>標(biāo)簽中的所有錯誤。你可以像這樣設(shè)置你自己的分隔符:
$this->upload->display_errors('<p>', '</p>');
data([$index = NULL])
參數(shù): | $ data(string) - 返回的元素而不是整個數(shù)組 |
---|---|
返回: | 關(guān)于上傳文件的信息 |
返回類型: | mixed |
$ data(string) - 返回的元素而不是整個數(shù)組
返回:關(guān)于上傳文件的信息
返回類型:混合
這是一個幫助器方法,它返回一個包含與您上傳的文件相關(guān)的所有數(shù)據(jù)的數(shù)組。這里是數(shù)組原型:
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" )
從數(shù)組中返回一個元素:
$this->upload->data('file_name'); // Returns: mypic.jpg
下面是一張解釋上面顯示的數(shù)組項(xiàng)目的表格:
項(xiàng)目描述file \ _name已上傳文件的名稱,包括文件擴(kuò)展名文件\ _type文件MIME類型標(biāo)識符file \ _path文件完整路徑\ _path絕對服務(wù)器路徑,包括文件名raw \ _name文件名,沒有擴(kuò)展名\原始文件名。這僅在您使用加密名稱選項(xiàng)時才有用。client \ _name在任何文件名稱準(zhǔn)備或增量文件之前由客戶端用戶代理提供的文件名稱\ _ext文件名擴(kuò)展名,包含句點(diǎn)的文件\ _size文件大?。ㄒ郧ё止?jié)為單位)是\ _image文件是否為圖像。1 =圖像。0 =不。