©
Dokumen ini menggunakan Manual laman web PHP Cina Lepaskan
CodeIgniter的文件上传类允许上传文件。您可以设置各种首选项,限制文件的类型和大小。
过程
创建上传表单
成功页面
控制器
上传目录
尝试一下!
参考指南
初始化上传类
设置首选项
优先
在配置文件中设置首选项
类参考
上传文件涉及以下一般过程:
显示上传表单,允许用户选择文件并上传。
提交表单时,文件将上传到您指定的目的地。
一路上,文件被验证,以确保它被允许根据您设置的偏好进行上传。
一旦上传,用户将被显示成功消息。
为了演示这个过程,这里是简短的教程。之后你会找到参考信息。
使用文本编辑器创建一个名为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>
您会注意到我们正在使用表单助手来创建开始表单标记。文件上传需要多部分形式,所以助手会为你创建合适的语法。您还会注意到我们有一个$ error变量。这样我们可以在用户做错事情时显示错误消息。
使用文本编辑器创建一个名为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>
使用文本编辑器创建一个名为Upload.php的控制器。在它中,放置这些代码并将其保存到您的应用程序/ 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); } }}?>
您需要上传图片的目标目录。在CodeIgniter安装的根目录创建一个名为uploads的目录,并将其文件权限设置为777。
要尝试表单,请使用类似下面的网址访问您的网站:
example.com/index.php/upload/
你应该看到一个上传表单。尝试上传图片文件(JPG,GIF或PNG)。如果你的控制器中的路径是正确的,它应该工作。
像CodeIgniter中的大多数其他类一样,Upload类在您的控制器中使用以下$this->load->library()
方法进行初始化:
$this->load->library('upload');
一旦加载了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()`` method. Useful if you auto-load the class:$this->upload->initialize($config);
上述偏好应该是不言自明的。以下是描述所有可用偏好的表格。
以下偏好是可用的。默认值表示如果不指定该首选项将使用的内容。
Preference | 默认值 | 选项 | 描述 |
---|---|---|---|
upload_path | 没有 | 没有 | 应该放置上传目录的路径。该目录必须是可写的,路径可以是绝对路径或相对路径。 |
allowed_types | 没有 | 没有 | MIME类型对应于您允许上传的文件类型。通常文件扩展名可以用作MIME类型。可以是数组或管道分隔的字符串。 |
文件名 | 没有 | 所需的文件名 | 如果设置CodeIgniter会将上传的文件重命名为该名称。文件名中提供的扩展名也必须是允许的文件类型。如果没有提供原始文件名的扩展名将被使用。 |
file_ext_tolower | 假 | TRUE / FALSE(布尔) | 如果设置为TRUE,文件扩展名将被强制为小写 |
overwrite | 假 | TRUE / FALSE(布尔) | 如果设置为true,如果存在与正在上传的文件同名的文件,则该文件将被覆盖。如果设置为false,如果存在另一个具有相同名称的文件,则会在文件名后附加一个数字。 |
MAX_SIZE | 0 | 没有 | 文件的最大大小(以千字节为单位)。无限制设置为零。注意:大多数PHP安装都有自己的限制,正如在php.ini文件中指定的那样。通常默认2 MB(或2048 KB)。 |
MAX_WIDTH | 0 | 没有 | 图像可以是的最大宽度(以像素为单位)。无限制设置为零。 |
最大高度 | 0 | 没有 | 图像的最大高度(以像素为单位)。无限制设置为零。 |
MIN_WIDTH | 0 | 没有 | 图像可以是的最小宽度(以像素为单位)。无限制设置为零。 |
MIN_HEIGHT | 0 | 没有 | 图像可能的最小高度(以像素为单位)。无限制设置为零。 |
max_filename | 0 | 没有 | 文件名的最大长度。无限制设置为零。 |
max_filename_increment | 100 | 没有 | 当覆盖设置为FALSE时,使用它来设置CodeIgniter追加到文件名的最大文件名增量。 |
encrypt_name | 假 | TRUE / FALSE(布尔) | 如果设置为TRUE,文件名将被转换为随机加密的字符串。如果您希望使用名称无法识别的文件来保存文件,这会非常有用。 |
remove_spaces | 真 | TRUE / FALSE(布尔) | 如果设置为TRUE,则文件名中的任何空格将转换为下划线。这是推荐的。 |
detect_mime | 真 | TRUE / FALSE(布尔) | 如果设置为TRUE,则将执行服务器端文件类型检测以避免代码注入攻击。不要禁用此选项,除非您没有其他选择,否则会导致安全风险。 |
mod_mime_fix | 真 | TRUE / FALSE(布尔) | 如果设置为TRUE,多个文件扩展名后面会加下划线,以避免触发Apache mod_mime。如果您的上传目录是公开的,请不要关闭此选项,因为这存在安全风险。 |
如果您不想使用上述方法设置首选项,则可以将它们放入配置文件中。只需创建一个名为upload.php的新文件,在该文件中添加$ config数组。然后将该文件保存在:config / upload.php中,并自动使用。如果将$this->upload->initialize()
首选项保存在配置文件中,则不需要使用该方法。
class CI_Uploadinitialize([array $config = array()[, $reset = TRUE]])
参数: | $ config(array) - 首选项$ reset(bool) - 是否将首选项(不在$ config中提供)重置为默认值 |
---|---|
返回: | CI_Upload实例(方法链) |
返回类型: | CI_Upload |
$ config(数组) - 首选项
$ reset(bool) - 是否将首选项(不在$ config中提供)重置为默认值
返回:CI \ _Upload实例(方法链接)
Return type: CI\_Upload
do_upload([$field = 'userfile'])
参数: | $ field(string) - 表单字段的名称 |
---|---|
返回: | 成功为TRUE,失败为FALSE |
返回类型: | 布尔 |
$ field(string) - 表单字段的名称
返回:成功时为TRUE,失败时为FALSE
返回类型:布尔值
根据您设定的偏好执行上传。
注意
默认情况下,上传例程期望文件来自称为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);
display_errors([$open = '<p>'[, $close = '</p>']])
参数: | $ open(string) - 打开标记$ close(string) - 关闭标记 |
---|---|
返回: | 格式化的错误信息(s) |
返回类型: | 串 |
$ open(string) - 打开标记
$ close(string) - 关闭标记
返回:格式错误消息(s)
返回类型:字符串
如果`do_upload()`方法返回false,则检索任何错误消息。该方法不会自动回显,它会返回数据,以便您根据需要分配数据。
格式错误
默认情况下,上面的方法包含<p>标签中的所有错误。你可以像这样设置你自己的分隔符:
$this->upload->display_errors('<p>', '</p>');
data([$index = NULL])
参数: | $ data(string) - 返回的元素而不是整个数组 |
---|---|
返回: | 关于上传文件的信息 |
返回类型: | mixed |
$ data(string) - 返回的元素而不是整个数组
返回:关于上传文件的信息
返回类型:混合
这是一个帮助器方法,它返回一个包含与您上传的文件相关的所有数据的数组。这里是数组原型:
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" )
从数组中返回一个元素:
$this->upload->data('file_name'); // Returns: mypic.jpg
下面是一张解释上面显示的数组项目的表格:
项目描述file \ _name已上传文件的名称,包括文件扩展名文件\ _type文件MIME类型标识符file \ _path文件完整路径\ _path绝对服务器路径,包括文件名raw \ _name文件名,没有扩展名\原始文件名。这仅在您使用加密名称选项时才有用。client \ _name在任何文件名称准备或增量文件之前由客户端用户代理提供的文件名称\ _ext文件名扩展名,包含句点的文件\ _size文件大小(以千字节为单位)是\ _image文件是否为图像。1 =图像。0 =不。