PHP上传图片和视频 问题处理(初学者)


th框架


前提:环境配置成功,并且成功运行thinkphp框架 

今天第一次写博客,刚刚更新的微博是系统默认~~

说一下昨天晚上遇到的php上传图片和视频问题,在这里稍作总结。这里仅仅以Admin后台为例

上传文件须在form表单中(action位置)添加 enctype=”multipart/form-data”

(1)上传图片只是一个input

**第一步**Application\Common\Common\function.php可以写这样一个函数来封装,完成上传图片的操作,并且返回$ret数组。三个形参的意义:①上传的input的name属性②上传的Public目录名③生成的缩略图大小的数组。

$ret是生成的图片路径数组,其中也包括提示信息ok和error

function uploadOne($imgName,$dirName,$thumb = array()){
    //上传logo
    if (isset($_FILES[$imgName]) && $_FILES[$imgName]['error'] == 0) {
        //有图片  tp框架提供了代码
        $rootPath = C('IMG_rootPath');
        $upload = new \Think\Upload(array(
            'rootPath' => $rootPath,
        ));// 实例化上传类
        $upload->maxSize = (int)C('IMG_maxSize') * 1024 * 1024;// 设置附件上传大小
        $upload->exts = C('IMG_exts');// 设置附件上传类型
//            $upload->rootPath = $rootPath; // 设置附件上传根目录 当前目录入口文件目录
        $upload->savePath = $dirName . '/'; // 设置附件上传(子)目录 图片二级目录
        // 上传文件
        $info = $upload->upload();
        if (!$info) {// 上传错误提示错误信息
            return array(
                'ok'=>0,
                'error'=>$upload->getError()
            );
        } else {// 上传成功
            $ret['ok'] = 1;

            $ret['images'][0] = $logoName = $info[$imgName]['savepath'] . $info[$imgName]['savename'];
            //判断是否生成缩略图
            if($thumb){
                $image = new \Think\Image();
                //拼出每个缩略图的文件名
                foreach ($thumb as $k => $v) {
                    $ret['images'][$k+1] = $smLogoName = $info[$imgName]['savepath'] . 'thunmb'.$k.'_' . $info[$imgName]['savename'];

                    $image->open($rootPath . $logoName);//打开文件
// 按照原图的比例生成一个最大为150*150的缩略图并保存为thumb.jpg
                    $image->thumb($v[0], $v[1])->save($rootPath . $ret['images'][$k+1]);
                }
            }
            return $ret;
        }
    }
}

第二步在对应的Application\Admin\Model下的*.class.php文件中的插入之前的函数中将data[‘数据库列名’]赋值,在Controller中调用add函数会插入到数据库。

protected function _before_insert(&$data, $option)
    {
        $ret = uploadOne('avator', 'Chang', array(//avator是form表单中的input的name属性
            array(100, 100),//这里的array是灵活的,这样表示生成两张缩略图
            array(100, 100),
        ));
//        var_dump($ret);die;
        if ($ret['ok'] == 1) {
            //把图片的路径放到数据库中
            $data['avator'] = $ret['images'][0];//原图地址
        }
    }

注:数据库中字段名和第二步中的data[‘avator’]需一致

(2)同时上传图片和视频

(意味着包含两个或者多个input)无需封装

嘎嘎 在Model的*.class.php文件的_before_insert(翻译:插入之前)函数配置好上传信息,包括上传根路径,大小,保存路径。然后调用tp的upload函数,打印$info信息,如若第一次就打印出所有input(数组形式)的信息则直接成功可以进行第二步(代码)。

图片因为不大,所以一般都能打印,视频信息不能打印看番外~~

protected function _before_insert(&$data, $option)
    {
        $rootPath = C('IMG_rootPath');
                $upload = new \Think\Upload(array(
                    'rootPath' => $rootPath,
                ));// 实例化上传类
                $upload->maxSize = (int)C('IMG_maxSize') * 1024 * 1024;// 设置附件上传大小
                $upload->exts = C('IMG_exts');// 设置附件上传类型
        //            $upload->rootPath = $rootPath; // 设置附件上传根目录 当前目录入口文件目录
                $upload->savePath = "Game" . '/'; // 设置附件上传(子)目录 图片二级目录
                $info = $upload->upload();
        //        var_dump($info);exit;


//第二步代码
                $logoName1 = $info['logo']['savepath'] . $info['logo']['savename'];
                $smLogoName1 = $info['logo']['savepath'] . 'thunmb'.'_' . $info['logo']['savename'];
                $logoName2 = $info['img']['savepath'] . $info['img']['savename'];
                $video = $info['video']['savepath'] . $info['video']['savename'];
                $image = new \Think\Image();
                $image->open($rootPath . $logoName1);//打开文件
        // 按照原图的比例生成一个最大为150*150的缩略图并保存为thumb.jpg
                $image->thumb(100, 100)->save($rootPath . $smLogoName1);
                $data['logo'] = $logoName1;
                $data['sm_logo'] = $smLogoName1;
                $data['img'] = $logoName2;
                $data['video'] = $video;

    }

番外:<1> 代码中设置附件类型须包含视频类型mp4 rmvb等
<2>Application\Common\Conf\config.php文件的IMG_maxSize设置大小受限制
<3> 打开wampserver->PHP->php.ini文件,几个上传文件设置值的修改(网速可能有关)
file_uploads = on
upload_max_filesize = 8m ;望文生意,即允许上传文件大小的最大值
memory_limit = 8m ;每个PHP页面所吃掉的最大内存,默认8M
post_max_size = 8m ;指通过表单POST给PHP的所能接收的最大值

以上就是我遇到的php上传问题,第一次写还有点手拙,哈哈 继续努力~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值