sdk下載地址:https://cloud.tencent.com/document/product/436/6274
文件結構:
1.手動上傳圖片,傳到騰訊雲
img.php
1 <!--enctype屬性標識提交表單時要用哪種內容類型,我們這是上傳文件(二進制數據),使用multipart/form-data--> 2 <form action="upload_img.php" method="post" enctype="multipart/form-data"> 3 <input type="file" name="file" id="file"/> 4 <input type="submit" value="Submit"/> 5 </form>
upload_img.php
1 <?php 2 // 通過使用 PHP 的全局數組 $_FILES,你可以從客戶計算機向遠程服務器上傳文件。 3 $filename=$_FILES["file"]["name"]; 4 $filesize=$_FILES["file"]["size"]; 5 $filetmp_name=$_FILES["file"]["tmp_name"]; 6 $filetype=$_FILES["file"]["type"]; 7 $rs=astrict($filename,$filesize,$filetmp_name,$filetype); 8 9 if ($rs=='onlyjpg' ||$rs=='big' || $rs=='dengrous'){ 10 exit(json_encode(array('code'=>'0','msg'=>$rs))); 11 } 12 // explode:將字符串打散為數組 13 $ns=explode('.',$rs); 14 if (count($ns)<2){ 15 exit($transCountImg[$rs]); 16 } 17 require('cos/include.php'); 18 use Qcloud\Cos\Api; 19 $config = array( 20 'app_id' => '1256728598', 21 'secret_id' => 'AKIDZy96qOJofIgroXQGG1XnnX1FFzThfNp5', 22 'secret_key' => 'A7tsgGckeJkxvfARTHqAE3cw0pPoyznN', 23 'region' => 'gz', 24 'timeout' => 60 25 ); 26 date_default_timezone_set('PRC'); 27 $cosApi = new Api($config); 28 $y=date('Y'); 29 $m=date('m'); 30 $nad=basename($rs); 31 $dst='/img/'.$y.'/'.$m.'/'.$nad; 32 $buffer='test'; 33 $rets=$cosApi->upload($buffer,$rs,$dst); 34 // var_dump($rets); 35 if ($rets['code'] !='0' || strtoupper($rets["message"]) !='SUCCESS'){ 36 exit($rets["message"]); 37 } 38 // 圖片上傳到騰訊雲后,刪除服務器對應文件夾的圖片 39 exec("rm -rf $rs"); 40 $url=$rets["data"]["source_url"]; 41 $url=str_replace('http://','https://',$url); 42 exit(json_encode(array('code'=>'1','msg'=>$url))); 43 44 function astrict($picName,$picSize,$picTemp,$picType){ 45 $rd=getimagesize($picTemp); 46 //限制圖片的內容只能為jpg和png 47 if ($rd['mime'] != 'image/jpeg' && $rd['mime'] !='image/png'){ 48 return 'onlyjpg'; 49 exit(); 50 } 51 if ($picName != ""){ 52 //限制圖片大小 53 if ($picSize > 2097152){ 54 return "big"; 55 exit(); 56 } 57 //判斷圖片類型 58 if ($picType !='image/jpeg' && $picType !="iamge/png"){ 59 return 'onlyjpg'; 60 exit(); 61 } 62 } 63 $rand=rand(100,999); 64 $pics=md5(date("YmdHis").$rand).".jpg"; 65 $src = './upload/' . $pics; 66 //檢測不良字符串 67 if (file_exists($picTemp)) { 68 $resource = fopen($picTemp, 'rb'); 69 $fileSize = filesize($picTemp); 70 fseek($resource, 0); 71 } else { 72 exit($transCountImg["existent"]); 73 } 74 if ($fileSize > 512) { // 取頭和尾 75 $hexCode = bin2hex(fread($resource, 512)); 76 fseek($resource, $fileSize - 512); 77 $hexCode .= bin2hex(fread($resource, 512)); 78 } else { // 取全部 79 $hexCode = bin2hex(fread($resource, $fileSize)); 80 } 81 fclose($resource); 82 if (preg_match("/(3c25.*?28.*?29.*?253e)|(3c3f.*?28.*?29.*?3f3e)|(3C534352495054)|(2F5343524950543E)|(3C736372697074)|(2F7363726970743E)/is", $hexCode)) { 83 return 'dengrous'; 84 exit(); 85 } 86 move_uploaded_file($picTemp,$src); 87 return $src; 88 }
在學習中遇到的問題:
- (img.php)form的enctype一定要為multipart/form-data
- (upload_img.php)第47行和58行,同時判斷圖片類型,因為雙重判斷效果會更好。參考:http://www.lao8.org/article_1479/getimagesize_type
- (upload_img.php)第66行到85行,是為了檢測圖片內容是否含有不良字符。參考:https://www.cnblogs.com/jingmin/p/6308870.html
- 最重要的一點,坑爹啊,花費了近半小時的時候。第65行,將臨時圖片存入對應路徑的時候,文件夾一定要設置777權限。
2.通過抓取到的url圖片地址,傳到騰訊雲
Test.php
1 <?php 2 require('cos/include.php'); 3 use Qcloud\Cos\Api; 4 $config = array( 5 'app_id' => '1256728598', 6 'secret_id' => 'AKIDZy96qOJofIgroXQGG1XnnX1FFzThfNp5', 7 'secret_key' => 'A7tsgGckeJkxvfARTHqAE3cw0pPoyznN', 8 'region' => 'gz', 9 'timeout' => 60 10 ); 11 date_default_timezone_set('PRC'); 12 $cosApi = new Api($config); 13 $url="https://ss3.bdstatic.com/70cFv8Sh_Q1YnxGkpoWK1HF6hhy/it/u=38344941,2783861310&fm=27&gp=0.jpg"; 14 $content=file_get_contents($url); 15 file_put_contents('./img.jpg',$content); 16 17 $bucket='test'; 18 $rs='./img.jpg'; 19 $y = date('Y'); 20 $m = date('m'); 21 $nad = basename($rs); 22 $dst = '/img/' . $y . '/' . $m . '/' . $nad; 23 24 $rets= $cosApi->upload($bucket, $rs, $dst); 25 // var_dump($rets); 26 $url = $rets['data']['source_url']; 27 $url = str_replace('http://', 'https://', $url); 28 29 exit(json_encode(array('code'=>'1','msg'=>$url)));
在學習中遇到的問題:
- 因為是先學習的上傳圖片到騰訊雲,思路一直死死的停留在通過$_FILES接收到的參數取做,上傳等操作,后仔細一想,不對。$_FILES是一個全局數組,怎么會接收一個url地址的圖片呢?
- 正確的思路是這樣的。先下載圖片到服務器,在上傳圖片到騰訊雲
- 下載圖片通過(file_get_contents、file_put_contents)
