资讯专栏INFORMATION COLUMN

跟着阿大学CodeIgniter (二)—— 文件上传

crelaber / 3544人阅读

摘要:文件名中的扩展名也必须是允许的文件类型。注意通常也有这项限制,可以在文件中指定。上传文件的高度最大值像素为单位。


阿大说,为做一张配图,还要换系统,好苦13 ╮(╯-╰)╭

原生php上传

在使用CI之前,我们来看看用原生代码是如何上传的,做个对比,就知道CI有多么方便~

首先创建一个视图ci/application/views/uploader1.php

表单的 action 填写调用的控制器的上传方法"upload1/up",这个将在下一步代码中完成控制器具体内容

填写method,get或post

当表单需要上传时,应填写"enctype="multipart/form-data""

然后写控制器ci/application/controllers/upload1.php

move_uploaded_file() 是PHP的一个内置方法,把上传好的文件从缓存处移到你想要的位置

 load -> view("uploader1.php"); //调用视图
    }

    function up() //这个就是视图里action调用的上传接口
    {
        if (!empty($_POST["sub"])) { //当提交的时候
            // var_dump($_FILES["upfile"]); 可以打印看看上传文件的信息
            $f = $_FILES["upfile"]; //把文件信息赋给一个变量,方便调用
            if ($f["size"] > 102400) { //限制文件大小
                echo "too large";
            } else {
                if ($f["type"] == "image/png") { //限制文件类型为png
                    $t = time(); // 时间戳
                    $s = ".png";
                    move_uploaded_file($f["tmp_name"], move_uploaded_file($f["tmp_name"], "./uploads/".$t.$s);
                    //$f["tmp_name"]是上传好的文件从缓存文件,"/uploads/$t$s"是我们要移动到的文件夹,在根目录下自己创建的uploads文件夹。"./uploads/".$t.$s 是变量的值进行字符串拼接,把文件以时间戳命名
                }
            }
        }
    }
}
?>

现在可以访问localhost/ci/index.php/upload进行上传文件了

CI文件上传

CI有一个丰富的上传类upload,它的源码放在system/libraries/upload.php。我们可以轻松的调用它完成一系列操作。

定义一个数组,存放设置

引用CI 的 upload类,使用do_upload("上传框的name")方法进行上传。若上传文件的input的name是userfile,则此方法不用带参数。可以看到upload类的源码里此处有个默认值就是userfile。

接收成功或出错信息。
> 成功:$this -> upload -> data()
> 错误:$this -> upload -> display_errors()

首先创建一个视图ci/application/views/uploader2.php

注意此处 action 改为 "upload2/up",其他不变

然后写控制器ci/application/controllers/upload2.php

设置参数更多:

名称 介绍
upload_path 文件上传路径。该路径必须是可写的,相对路径和绝对路径均可以。
allowed_types 允许上传文件的MIME类型;通常文件扩展名可以做为MIME类型. 允许多个类型用竖线分开
file_name 想要使用的文件名,如果设置了这个参数,CodeIgniter 将根据这里设置的文件名来对上传的文件进行重命名。文件名中的扩展名也必须是允许的文件类型。
max_size 允许上传文件大小的最大值(以K为单位)。该参数为0则不限制。注意:通常PHP也有这项限制,可以在php.ini文件中指定。通常默认为2MB。
max_width 上传文件的宽度最大值(像素为单位)。0为不限制。
max_height 上传文件的高度最大值(像素为单位)。0为不限制。
 load -> view("uploader2.php");
    }

    function up()
    {
        // 把需要的配置放入config数组
        $config["upload_path"] = "./uploads";
        $config["allowed_types"] = "gif|jpg|png";
        $config["max_size"] = "102400";
        $this -> load -> library("upload", $config); //调用CI的upload类
        $this -> upload -> do_upload("upfile"); //使用do_upload("上传框的name")方法进行上传

        // 以下代码为拓展的,非必要
        if ($this -> upload -> do_upload("upfile")) { //上传成功
            $data = array("upload_data" => $this -> upload -> data()); //将文件信息存入数组
            var_dump($data); //打印文件信息
        } else { //上传失败
            $error = array("error" => $this -> upload -> display_errors());//将错误信息存入数组
            var_dump($error); //打印错误信息
        }
    }
}
?>

现在可以访问localhost/ci/index.php/upload2进行上传文件了

小结

CI的上传类是我们上传更方便,代码量少,并且很整洁

本系列文章

跟着阿大学CodeIgniter (一)——了解MVC
跟着阿大学CodeIgniter (二)—— 文件上传
跟着阿大学CodeIgniter (三)—— 操作数据库

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/20660.html

相关文章

  • 跟着阿大CodeIgniter (一)——了解MVC

    摘要:它提供一套丰富的标准库以及简单的接口和逻辑结构,其目的是使开发人员更快速地进行项目开发。文件放在里类名首字母必须大写,并继承的类访问的路径为项目名入口控制器名控制器的方法参数。 有的没的 showImg(http://segmentfault.com/img/bVbOml);阿大镇文(-_-メ)~ 阿大你太黑了,回去洗把脸看看有没有救~ 学习背景 CI是一个比较流行的PHP MV...

    wenzi 评论0 收藏0
  • 跟着阿大CodeIgniter (三)—— 操作数据库

    摘要:提供了强大的数据库函数类,源码是文件。配置数据库文件到进行必要的配置,把数据库名密码编码等填写好。本系列文章跟着阿大学一了解跟着阿大学二文件上传跟着阿大学三操作数据库 碎碎念 过年还来SegmentFault学习的都是好少年~ showImg(http://segmentfault.com/img/bVbQOE); 知识重点 涉及到数据库,就是比较复杂的内容了,所以本文略长,但...

    eechen 评论0 收藏0
  • 跟着阿大CodeIgniter (四)——登录验证

    摘要:镇文图什么是是用于保持状态的基于服务器的方法。可以简单理解为服务器给用户生成了一个通行证。建立文件意味着我们待会要用到控制器的函数退出调用控制器的函数编写控制器类接下来,我们要一步步往这个类里面加功能。 镇文图 showImg(http://segmentfault.com/img/bVbSFL); 什么是Session Session是用于保持状态的基于Web服务器的方法。可以...

    xiaowugui666 评论0 收藏0
  • CodeIgniter 4 建议路线图

    摘要:核心变化从第一版发布以来,社区发生了巨大变化。这意味着系统必须全部重写。暂时不会为一个即将停止支持的版本发布新版本。路由路由功能将被更新。改进的日志系统日志系统将被改进,但具体细节尚未确定。第一阶段第一阶段将侧重于抓住框架最重要的部分。 我们综合考虑了社区的愿望和意见后,也对什么样的未来对 CI 是最合适的做了一些思考,然后,CI 理事会对框架的未来做出了一些决策。预告一下,未来将会有...

    sean 评论0 收藏0
  • CodeIgniter框架之上传图片功能的实现

    摘要:在做一个网站的发布作业模块,想通过上传作业图片实现发布作业功能。 在做一个网站的发布作业模块,想通过上传作业图片实现发布作业功能。现在把实现过程介绍一下,代码部分会有相应的注释以帮助理解,适合新手小白参考,希望大神阅后留下指导,莫笑~ 创建上传表单页面 新建一个文件 upload_form.php ,放入如下代码,并保存到 application/views/ 目录下: ...

    glumes 评论0 收藏0

发表评论

0条评论

crelaber

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<