时间:2021-07-01 10:21:17 帮助过:5人阅读
学习使用TP框架做电商网站是,添加商品表单需要上传商品logo和商品图片pics,有两个上传域,第一个上传域是logo,只上传一张,第二个上传域是pics,上传多张图片。使用如下代码,总是报错:非法上传文件!
$upload = \Think\Upload; $info=$upload->upload();
解决方法:
有多个上传域时,应如下使用upload方法,指定要处理的上传域:
$upload = \Think\Upload; $info1 = $upload->upload(array('logo'=>$_FILES['logo']); $info2 = $upload->upload(array('pics'=>$_FILES['pics']);
参考资料:
Title:
TP框架上传图片时报错“非法上传"处理
Content:
TP框架上传图片时报错“非法上传"处理,主要注意以下两点:
1.$_FILES中有多个上传域问题,所以针对不同的上传域,区别命名;
2.如同个上传域中有一些没有上传图片,则要重新收集好上传的信息(收集成非空的一维数组);
具体代码如下;
第一种情况:
if($this->_hasImg()) 02. { 03. // 只上传表单中name叫做jqimg的图片 04. $info = $upload->upload(array('jqimg'=>$_FILES['jqimg'])); 05. if(!$info) 06. redirect(U('Ad/Ad/save/id/'.$ad_id), 3, $upload->getError()); 07. // 循环每一张图片,插入到jq-info表 08. foreach ($infoas$k => $v) 09. { 10. $url = $v['savepath'] . $v['savename']; 11. $this->execute("INSERT INTO sh_ad_jq_info(img_url,ad_link,ad_id) VALUES('$url','{$_POST['jqtxt'][$k]}',$ad_id)"); 12. } 13. } 14. // 处理修改的图片 15. if(isset($_POST['oldjqtxt'])) 16. { 17. // 先上传图片修改的图片 18. $info = $upload->upload(array('oldjqimg'=>$_FILES['oldjqimg'])); 19. $_k = 0; 20. foreach ($_POST['oldjqtxt'] as$k => $v) 21. { 22. // 有没有上传新图片 23. if($info && isset($info[$_k])) 24. { 25. // 上传了新图片 26. // 先删除原图 27. $_ourl = $this->query('SELECT img_url FROM sh_ad_jq_info WHERE id = '.$k); 28. @unlink(IMG_URL_HD . $_ourl[0]['img_url']); 29. // 再更新为新图 30. $_url = $info[$_k]['savepath'] . $info[$_k]['savename']; 31. $this->execute("UPDATE sh_ad_jq_info SET ad_link='$v',img_url='$_url' WHERE id=$k"); 32. } 33. else 34. { 35. $this->execute("UPDATE sh_ad_jq_info SET ad_link='$v' WHERE id=$k"); 36. } 37. $_k++; 38. } 39. } 40. }
第二种情况:
foreach($_FILES['imgjq_url']['tmp_name'] as$k=>$v) 02. { 03. 04. if($v) 05. { 06. //删除原有硬盘图片 07. $img_url = $this->query("SELECT imgjq_url FROM sh_ad_jq_info WHERE id = $k"); 08. 09. @unlink(IMG_URL_HD .$img_url[0]['imgjq_url'] ); 10. 11. 12. //收集图片信息 13. $arr = array(); 14. $arr['name'] = $_FILES['imgjq_url']['name'][$k]; 15. $arr['type'] = $_FILES['imgjq_url']['type'][$k]; 16. $arr['tmp_name'] = $_FILES['imgjq_url']['tmp_name'][$k]; 17. $arr['error'] = $_FILES['imgjq_url']['error'][$k]; 18. $arr['size'] = $_FILES['imgjq_url']['size'][$k]; 19. 20. 21. //上传图片处理 22. $imgInfo = $upload->upload(array('imgjq_url' =>$arr )); 23. 24. if (!$imgInfo) { 25. echo$upload->getError();die; 26. } 27. 28. $imgjq_url = $imgInfo['imgjq_url']['savepath'].$imgInfo['imgjq_url']['savename']; 29. 30. //更新到数据库 31. $this->execute("UPDATE sh_ad_jq_info SET imgjq_url = '$imgjq_url' WHERE id = $k"); 32. 33. } 34. }
以上就介绍了仙剑奇侠传5前传支线 TP框架多上传域上传图片,包括了仙剑奇侠传5前传支线方面的内容,希望对PHP教程有兴趣的朋友有所帮助。