앱 서버 개발을 하면서 막혔던 부분이 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
Posted by xer0s :