ThinkPHP上传文件时,使用var_dump($_FILES)输出数组为空的解决办法。

3 篇文章 0 订阅

解决这个问题需要注意两点:

首先来看form表单的基本写法:

在这里,我需要上传一个背景图片,上传一个视频文件。

一:查看ThinkPHP官方手册,标的很明确,在

标签里一定要写上 enctype=”multipart/form-data” 。如果不写,文件是无法上传的。(直接遵守就行)

官方参考页面:http://www.thinkphp.cn/info/194.html

二:如果你第一步设置后,文件还是无法上传,这时,你要注意的是form标签里写的method 。有时写成post就造成var_dump($_FILES)时输入的数组为空值。这时改成大写的POST。

三:php默认的post_max_size 为2M.如果 POST 数据尺寸大于 post_max_size , $_POST 和 $_FILES 超全局变量便会为空.

解决办法:

  1. 一般的文件上传,除非文件很小.就像一个5M的文件,很可能要超过一分钟才能上传完. 但在php中,默认的该页最久执行时间为 30 秒.就是说超过30秒,该脚本就停止执行. 这就导致出现 无法打开网页的情况.这时我们可以修改 max_execution_time 在php.ini里查找 max_execution_time (翻译为最大执行时间)默认是30秒.改为 max_execution_time = 0(可修改范围为PHP_INI_ALL) 0表示没有限制 或者在php文件头设置ini_set(‘max_execution_time’,0);
  1. 修改 post_max_size 设定 POST 数据所允许的最大大小。此设定也影响到文件上传。 查找 post_max_size .改为 post_max_size = 150M(可修改范围为PHP_INI_PHP_INI_PERDIR)

  2. 很多人都会改了第二步.但上传文件时最大仍然为 8M. 为什么呢.我们还要改一个参数upload_max_filesize 表示所上传的文件的最大值。 查找upload_max_filesize,默认为8M改为 upload_max_filesize = 100M(可修改范围为PHP_INI_PHP_INI_PERDIR)
    另外要说明的是post_max_size是整个表单的大小,而upload_max_filesize是上传文件的大小,前者应大于后者.

表单提交到了home模块下的user控制器下的do_upload方法。,下面把方法贴上:

public function do_upload()
    {
        //var_dump($_FILES);

        if ($_FILES['defaultpic']['error'] == 4) { //判断文件是否上传
            $this->error('请上传图片');
        }
        if ($_FILES['videourl']['error'] == 4) { //判断文件是否上传
            $this->error('请上传视频');
        }

        $savepath = date('Ymd') . '/'; //取得当前时间作为上传文件时生成文件夹命名用
        //上传处理类
        $config = array(
            'rootPath' => './' . C("UPLOADPATH"),
            'savePath' => $savepath,
            'maxSize' => 0, //大小不做限制
            'saveName' => array('uniqid', ''),
            'exts' => array('jpg', 'png', 'jpeg', "mp4", 'avi', 'flv'), //上传文件的格式
            'autoSub' => false,
        );
        $upload = new \Think\Upload($config);//
        $info = $upload->upload(); //执行上传方法
        //开始上传  
        if ($info) {    //如果文件上传成功  
            //写入附件数据库信息  
            $first = array_shift($info);
            if (!empty($first['url'])) {
                $pic = $first['url'];
            } else {
                $pic = C("TMPL_PARSE_STRING.__UPLOAD__") . $savepath . $first['savename'];  //返回上传成功之后的默认图片文件名  
            }
            $first2 = array_shift($info);
            if (!empty($first2['url'])) {
                $video = $first2['url'];
            } else {
                $video = C("TMPL_PARSE_STRING.__UPLOAD__") . $savepath . $first2['savename']; //返回上传成功之后的默认图片文件名  
            }
        } else {
            //上传失败,返回错误  
            $this->error($upload->getError());
        }
        //1  
        $data = array(    //将上传数据存放到数组里  
            "title" => $_POST['title'],
            "defaultpic" => $pic,
            "videourl" => $video,
            "memo" => $_POST['memo'],
            "content" => $_POST['content']
        );
        $videos = M("videos")->add($data);   //执行添加数据库操作,并返回参数  
        /*  
         * //第二种方法保存到数据库  
         *   
         *$videos = M("videos");  
        $videos->create();  
        $videos->src = $pic;  
        if ($videos->add()) {
        $this->success('成功');
        }else{
        $this->error($upload->getError());
        }  
        */
        if ($videos == false) {
            $this->error("上传失败");
        } else {
            $this->success('上传成功');
        }
    }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值