php7.3 sql for문에 대해 질문드려요

php7.3 sql for문에 대해 질문드려요

QA

php7.3 sql for문에 대해 질문드려요

사용 PHP 버전

7.3

본문


//이메일발송 체크박스 선택시 : 공지내용도 함께 발송
//발송할 이메일 추출
$content = "~~~~";
$mail_arr=array();
$res = sql_query("select mb_id, mb_name, mb_email from {$g5['member_table']} where mb_email !='' and mb_mailling ='1' and (mb_level > '1' and mb_level < '4') order by mb_id asc");
$mb_cnt = sql_num_rows($res); //발송카운트
while($rowk=sql_fetch_array($res)){
   $mail_arr[] = $rowk['mb_email'];
}
if($sendmail=="Y") {
   for ($i=0; $i<$mb_cnt; $i++) {
      $arr_mail = $mail_arr[$i];
      $sw = preg_match("/[0-9a-zA-Z_]+(\.[0-9a-zA-Z_]+)*@[0-9a-zA-Z_]+(\.[0-9a-zA-Z_]+)*/", $arr_mail);
      if ($sw == true) {
           mailer($config['cf_admin_email_name'], $config['cf_admin_email'], $arr_mail, $subject, $content, 1);
           sql_query("insert into g5_write_reminder_mail set mb_id='{$mbid_arr[$i]}',wr_name='{$name_arr[$i]}',wr_email='{$arr_mail}',wr_datetime='".G5_TIME_YMDHIS."',rm_id='$wr_id'"); //발송내역저장
            }
        }
}
//문자발송 체크박스 선택시 : 공지제목없이 등록되었다는 워딩만 발송
//발송할 핸펀 추출
$phon_arr=array();
$res = sql_query("select mb_id, mb_name, mb_hp from {$g5['member_table']} where mb_level > '1' and mb_level < '4' and mb_hp !='' order by mb_id asc");
$hp_cnt = sql_num_rows($res); //발송카운트
while($rowk=sql_fetch_array($res)){
    $phon_arr[] = $rowk['mb_hp'];
}
if($sendsms=="Y") {
   $sms_msg = "{$config['cf_title']}/ 공지가 등록되었습니다. 홈페이지에서 확인하세요. ".G5_URL;
   $tran_msg = iconv("UTF-8","euc-kr//IGNORE",$sms_msg);
   for ($i=0; $i<count($phon_arr); $i++) {
       if($memberHP){
           $result = $SMS->Add($tran_phone,$tran_callback,$sms_id,$tran_msg,$tran_date);
           $result = $SMS->Send();
       sql_query("insert into g5_write_reminder_sms set mb_id='{$Mmb_id}',wr_name='{$Mmb_name}',wr_hp='{$phon_arr[$i]}',wr_datetime='".G5_TIME_YMDHIS."',rm_id='$wr_id'"); //발송내역저장
        }
    }
}

 

공지를 등록하면서 메일을 발송할 건지, 문자를 발송할 건지를 선택하면 공지등록과 동시에 조건에 해당하는 회원에게 일괄 발송하는 내용입니다.

공지등록은 그누5의 게시판 skin을 사용하였고 코드를 삽입한곳은 write.update.php이고 상기코드는 많이 줄여놓은 상태입니다.

메일은 그누5의 메일기능을 사용했고 문자는 아이코드 모듈을 사용했습니다.

 

테스트해보면 정상적으로 메일발송 및 문자발송이 잘 되고 있는 코드인데요.

 

고수님의 조언을 듣고자 하는건....

회원이 몇명이면 상관 없겠는데 회원이 2000명 3000명 4000명... 많을 경우... 아무리 생각해도 효율적이진 않을 꺼라는 생각에 고수님께 문의드립니다.

 

위의 방법 말고 어떻게 해야 무리없고 효율적인 프로그램으로 만들 수 있나요?

고수님 의견 좀 부탁드립니다.

 

 

 

이 질문에 댓글 쓰기 :

답변 1

보통 몇만건 이상 되는것을 동작 시킬려면 좀 생각이 많아지긴 하죠

시간이 좀 걸리더라도

while문을 돌려서 100여건 혹은 1000건씩 ( 대략 이정도면 되겠다 싶은 )정도씩

끊어서 보내구 한번 보낸후 약간 1내지 2초 정도 텀을 주고 또 보내구

그런식으로 보내면 됩니다

 

또한 대량의 메일이나 동작이 이뤄져야 하므로 업데이트나 인서트가 이뤄지지 않는 오류 동작이 있을때 예외 처리를 해서 롤백되도록 하구 어디까지 보냈는지 관리자가 볼수 있게 에코 처리를 하면 될거 같습니다

 

답변을 작성하시기 전에 로그인 해주세요.
전체 128,672 | RSS
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT