앱 서버 개발을 하면서 막혔던 부분이 gcm이랑 multipart 이렇게 두개 정도 였는데 정리겸 포스팅 해봅니다.
일단 아래는 push알림을 주는 gcm소스이고, API KEY는 본인이 직접 google에서 키를 발급받으셔야 됩니다.
$msg 인자는 push알림을 줄 json 인자고 $result는 db에서 reg_id를 뽑아 아직 fetch 하지 않은 resource 값입니다.
function gcmSend($msg, $result=NULL) { $header = array('Content-Type:application/json', 'Authorization:key=API_KEY'); $arr=array(); $arr['data']=array(); $arr['data']=$msg; $arr['registration_ids']=array(); $i=0; while($row=mysql_fetch_array($result)) { $arr['registration_ids'][$i]=$row['reg_id']; $ch=curl_init(); curl_setopt($ch,CURLOPT_URL,'http://android.googleapis.com/gcm/send'); curl_setopt($ch,CURLOPT_HTTPHEADER, $header); curl_setopt($ch,CURLOPT_POST, true); curl_setopt($ch,CURLOPT_RETURNTRANSFER,true); curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false); curl_setopt($ch,CURLOPT_POSTFIELDS,json_encode($arr)); $response=curl_exec($ch);
$obj=json_decode($response, true); if($obj['results'][0]['error']=="NotRegistered") { $reg_id=$row['reg_id']; $query="DELETE FROM user where reg_id='".$reg_id."'"; mysql_query($query) or die(mysql_error()); } } } |
그리고 다음은 multipart인데 클라이언트에서 서버로 이미지를 업로드 할때 쓰이는 방식입니다.
인자 $key는 FILES로 받은 타입이 배열일때 그걸 $key로 분리한거고 $error는... 제가 코딩한 방식 때문에 따로 추가시켜준 인자인데 소스를 보시고 이해하시면 될꺼 같습니다.
function imageUpload($key=NULL, $error=NULL) { if($error == UPLOAD_ERR_OK) { $imagetype = exif_imagetype($_FILES['file']['tmp_name'][$key]); if($imagetype != 2 && $imagetype != 3) { $return['msg'] = "Only JPG and PNG"; ReturnResult($return); } if($_FILES['file']['size'][$key] > 1024*1024*10) { $return['msg'] = "Too big"; ReturnResult($return); }
$filename = substr(sha1(rand().time()), 0, 20).".jpg";
while(1) { if(file_exists("images/".$filename)) { $filename = substr(sha1(rand().time()), 0, 20).".jpg"; } else break; } if(!move_uploaded_file($_FILES['file']['tmp_name'][$key], "filepath".$filename)) { $return['msg'] = "Move Uploaded File"; ReturnResult($return); } else { return $filename; } } else { $return['msg'] = "Error while uploading File"; ReturnResult($return); }
} |
이해를 돕기 위해 imageUpload를 호출한 부분도 올립니다.
foreach($_FILES['file']['error'] as $key => $error) { $filename = imageUpload($key, $error); $query = "INSERT INTO image(imageLoc, isThumbNail, diary_id) VALUES('".$filename."', 0, ".$row[0].")"; mysql_query($query); } |
'Programming' 카테고리의 다른 글
crc 정리 (0) | 2015.04.26 |
---|---|
Using Python Z3 theorem solver (3) | 2015.04.25 |
Python Assembly Emulator (0) | 2014.07.30 |
DimiManager 개발 후기 (0) | 2014.07.11 |
심심해서 만든거.. (0) | 2014.04.11 |