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

来源:互联网 发布:金蝶erp软件介绍 编辑:程序博客网 时间:2024/05/16 15:36

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上传问题,第一次写还有点手拙,哈哈 继续努力~~

0 0
原创粉丝点击