미스터S

권한으로 문자발송시 오류

· 2014-10-06 (월) 22:48:38 · 2208 · 6
Warning: array_count_values() [function.array-count-values]: Can only count STRING and INTEGER values! in /home/aoneps/www/adm/sms_admin/history_view.php

문자발송시 권한으로 회원을 추가하여 약 6천건 발송테스트시 오류가 뜹니다.
코드를 보니 빈 배열에 대해서 처리 과정이 없는것 같습니다.

두번째로 그룹으로 발송시 (회원의 그룹설정은 어찌하나요??)
select max(wr_no) as wr_no from sms5_write
2006 : MySQL server has gone away
error file : /adm/sms_admin/sms_write_send.php

라고 오류가 뜨면서 뻗습니다.
이건.. 서버설정마다 각기 다를것 같은데..
저같은 경우 my.cnf 에서 allowed packet 이 16M 로 설정이 되어있는데도 뻗네요..
common.lib 에서 mysql_connect 에서 뒤에 true로 new link를 허용해줘도 그렇습니다.

대체적으로 발송건수가 약 50~10000건이 넘어가게되면 발송하다 중간에 뻗는 경우가 많은데
나눠서 발송하도록 코드가 수정이 되면 어떨지 제안드립니다.
혹은 서버연동으로 db를 내부 table에 insert 하고 연동서버가 insert table을 가져가서 문자를 발송하는 테이블인서트 방식의 연동도 아이코드에서 가능하던데.. 이부분은 어떠하신지요?

아 그리고
jquery 버전은 1.8.3 으로 계속 고수하시던데 이유가 궁금합니다.
1.9.1 정도 사용해주셔도 괜찮지 않을까요? ^^
대부분의 최신 플러그인들이 live 메소드를 버리고 on을 사용하는데 충돌이 많이 나네요.

기능을 별도로 추가하거나 수정한 부분을 배포코드에 반영하시는데 도움이 된다면
제공해드리고 싶은데.. 이런 경우 어떻게 하는지도 궁금합니다.
github 가 있다고 들었습니다만 코드수정 참여는 안되는것 같습니다.
|

댓글 6개

서버연동으로 db를 내부 table에 insert 하고 연동서버가 insert table을 가져가서 문자를 발송하는 테이블인서트 방식
처음 들어보는 얘기인데, 이 부분에서 아이코드측에서 공개한 소스가 있나요?
이미 대량발송의 경우 흔히 사용하는 방식입니다.
아이코드측이 어떤 매리트가 있는지 모르겠습니다만
슈어엠 이라는 업체도 단가가 저렴하고 안정적인 table insert 방식을 운영합니다.
저희회사가 타 고객사 작업해줄때 사용했던 업체기도 하고요.
뻑나는거 방지하려고 딜레이를 약간 줬는데도 7만건 발송이 1분만에 끝났습니다. (저희쪽 insert 1분 이내.. 발송은 상황마다 다릅니다)
http://www.surem.co.kr/business/business_service1.asp

한번 참고해보세요.

아이코드사의 서버연동 방식은
http://www.icodekorea.com/smsbizinfo_new/sms/service_02.html
에 소개되어있습니다. 저도 아이코드사의 서버연동방식은 해본적이 없어서
정확히 제가 이해하고 있는 방식인지는 모르겠습니다.
jquery 버전을 변경해야할 이유가 없기 때문에 변경하지 않는 것입니다.
그리고 만약 변경을 하게 되면 그에 따른 프로그램의 테스트가 수반되어야 하고
기존에 1.8.3에 맞춰서 코드를 작성했던 분들이 계신다면 그 분들 역시 변경을 해야하기 때문에
특별한 이유가 없는 한 jquery 버전 변경을 예정되어 있지 않습니다.
1.8.3 역시 충분하다고 생각은 합니다.
반대로,추후 g5를 위해 1.8.3 에 맞춰진 분들이 향후 1.9.x 이상의 버전에 대응해야할때 수반되는 사회적비용도 1.8.3 사용자분들보다 많을거라 생각이 듭니다. 저희야 직접 매번 바꿔주면 되긴하지만..
1.8.3 과 1.9.x 이상의 변경된 메소드 때문에 충돌나시는분들이 꽤 있을거라 예상됩니다.
그누보드는 국가를 대표하는 플랫폼이다보니.. 수용이 가능하시다면 의견을 한번 공개적으로 받아보고
변경 여부를 고려 해봐주실 수 있으시면 좋겠습니다. 아님 공식적으로 1.8.3 이상 jquery 버전 쓰는사람들은 어디어디어디의 코드를 수정하라고 가이드를 내주시는것도 한 방법이겠습니다.
제가 곧 팁가이드에 올리긴 할것이긴 합니다만 제가 생각지 못한 부분(관리자모드쪽..)을 한번 되짚어봐주시면 감사하겠습니다.
1.9.x 버전이상에서는 sms5 문자보내기 쪽에서는 자바스크립트 처리하신곳에서 trim 이 작동하지 않더라구요..
/adm/sms_admin/history_view.php 에서

if( count($tmp_wr_memo) && is_array($tmp_wr_memo) ){
$arr_wr_memo = array_count_values( $tmp_wr_memo['hp'] );

위에 부분을 아래와 같이 고쳐주세요.

[code]
if( count($tmp_wr_memo) && is_array($tmp_wr_memo) ){
if(function_exists('array_fill_keys')){
$tmp_wr_hp = array_replace($tmp_wr_memo['hp'],array_fill_keys(array_keys($tmp_wr_memo['hp'], null),''));
} else {
$tmp_wr_hp = $tmp_wr_memo['hp'];
}
$arr_wr_memo = @array_count_values( $tmp_wr_hp );
[/code]


MySQL server has gone away 문제는

/adm/sms_admin/sms_write_send.php 에서
부하가 되는 코드는 아래 코드 입니다만,

[code]
foreach ($SMS->Result as $result)
{
list($phone, $code) = explode(":", $result);

if (substr($code,0,5) == "Error")
{
$hs_code = substr($code,6,2);

switch ($hs_code) {
case '02': // "02:형식오류"
$hs_memo = "형식이 잘못되어 전송이 실패하였습니다.";
break;
case '23': // "23:인증실패,데이터오류,전송날짜오류"
$hs_memo = "데이터를 다시 확인해 주시기바랍니다.";
break;
case '97': // "97:잔여코인부족"
$hs_memo = "잔여코인이 부족합니다.";
break;
case '98': // "98:사용기간만료"
$hs_memo = "사용기간이 만료되었습니다.";
break;
case '99': // "99:인증실패"
$hs_memo = "인증 받지 못하였습니다. 계정을 다시 확인해 주세요.";
break;
default: // "미 확인 오류"
$hs_memo = "알 수 없는 오류로 전송이 실패하었습니다.";
break;
}
$wr_failure++;
$hs_flag = 0;
}
else
{
$hs_code = $code;
$hs_memo = get_hp($phone, 1)."로 전송했습니다.";
$wr_success++;
$hs_flag = 1;
}

$row = array_shift($list);
$row['bk_hp'] = get_hp($row['bk_hp'], 1);

$log = array_shift($SMS->Log);

sql_query("insert into {$g5['sms5_history_table']} set wr_no='$wr_no', wr_renum=0, bg_no='{$row['bg_no']}', mb_id='{$row['mb_id']}', bk_no='{$row['bk_no']}', hs_name='".addslashes($row['bk_name'])."', hs_hp='{$row['bk_hp']}', hs_datetime='".G5_TIME_YMDHIS."', hs_flag='$hs_flag', hs_code='$hs_code', hs_memo='".addslashes($hs_memo)."', hs_log='".addslashes($log)."'");
}
[/code]

db가 못버티면 위의 코드는 삭제하는게 좋을것 같습니다.
서버가 못버티는게 아니라 서버설정에 따라 웹상에서 링크가 끊어집니다.(서버 스펙은.. 좋습니다^^;)
위 sql쿼리를 echo로 text로 만든다음에 sql을 적어 insert 하면 문제없이 잘 들어갑니다.
특히 저 hs_log 쪽이 이상하게 문자열이 utf-8이 아닌것처럼 찍힐때가 있는데 이부분때문에 fail 되는 경우도 있었습니다. 참고하세요~
댓글을 작성하시려면 로그인이 필요합니다.

버그신고

4,191건

  문의게시판을 이용해 주세요 :) https://sir.kr/co_qa  

+
분류 제목 글쓴이 날짜
14-11-06
14-11-05
14-11-04
14-11-03
14-11-01
14-10-31
14-10-29
14-10-29
14-10-28
14-10-28
14-10-22
14-10-21
14-10-12
14-10-11
14-10-10
14-10-07
14-10-06
14-10-02
14-10-02
14-10-01