問題:
學習使用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 ($info as $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. }