안녕하세요? ^^ 주말 잘 보내고 계시는가요?
이 스크립트는 아미나에서 게시글을 작성하면 자동으로 랜덤 댓글을 남기는 PHP 파일입니다.
(그누보드에서도 스크립트 중에 몇 줄을 삭제하면 사용할 수 있을 것 같네요)
이와 관련된 소스가 이미 그누보드나 아미나의 여러 게시물에 올라와 있고
사실 제가 작성한 스크립트도 그와 대동소이합니다.
다만 큰 차이는 아니지만 다음과 같은 부분을 좀 더 보완하도록 노력하였습니다.
1) 관리자로 로그인하거나 회사 IP로 접속한 경우에는 자동댓글이 등록되지 않도록 하였으며,
2) $write_table에 데이터를 삽입하는 부분을 비롯하여 스크립트를 가능한 한 컴팩트하게 작성했고,
3) 랜덤 댓글의 배열에 요소를 추가하기 간편하도록 하였으며,
4) 선택된 특정 게시판에만 자동 댓글이 등록되도록 하였습니다.
우선 기존의 스크립트에서 $wr_write_password와 관련된 부분을 모두 삭제하여 null로 입력하여도
제가 테스트한 바로는 아미나에서 아직까지 아무런 문제점을 발견하지 못했습니다.
그리고 아미나 basic-board의 write_update.tail.skin.php 파일에 원래 들어있는
@include_once($write_skin_path.'/write_update.tail.skin.php');
이 부분을 삭제했는데 아직까지는 아무런 문제가 발생하지 않았습니다 ^^
아미나를 기준으로 basic-board의 write_update.tail.skin.php 파일을 아래와 같은 내용으로 대체하시면 됩니다.
<?php if (!defined('_GNUBOARD_')) exit; if ($w =='' && $bo_table === '게시판ID' && $_SERVER['REMOTE_ADDR'] !== '회사IP' && !($is_admin)) { // 회사IP로 접속하거나 admin 계정으로 접속한 경우를 제외하고, 선택된 게시판에만 자동 댓글이 등록됩니다. $reply = array( "안녕하세요? 문의글을 작성해주셔서 감사합니다.\n최대한 빠른 시간 내에 확인한 후 답변 드리겠습니다.", "안녕하세요? 저희 사이트에 문의해주셔서 감사합니다.\n최대한 빨리 답변 드리도록 하겠습니다.", "안녕하십니까? 게시판에 문의를 남겨주셔서 감사드립니다.\n최대한 신속히 답변을 드리겠습니다.", "안녕하십니까? 올려주신 질문이 잘 접수되었습니다.\n확인 후 바로 답변 올리겠습니다. 감사합니다.", "안녕하십니까? 저희 사이트에 문의를 해주셔서 감사합니다.\n저희가 신속히 확인하여 답변 드리겠습니다." ); $randint = mt_rand(0, count($reply)-1); $wr_write = get_write($write_table, $wr_id); $wr_write_content = $reply[$randint]; $wr_write_cname = "게시판담당자"; // 댓글 작성자의 닉네임 $wr_write_mbid = "boardmaster"; // 댓글 작성자의 아이디 $sql = " insert into $write_table set ca_name = '$wr_write[ca_name]', wr_num = '$wr_write[wr_num]', wr_parent = '$wr_id', wr_is_comment = '1', wr_comment = '1', wr_content = '$wr_write_content', mb_id = '$wr_write_mbid', wr_password = '', wr_name = '$wr_write_cname', wr_datetime = '".G5_TIME_YMDHIS."', wr_ip = '' "; sql_query($sql); sql_query(" update $write_table set wr_comment = wr_comment + 1 where wr_id = '$wr_id' "); sql_query(" update $g5[board_table] set bo_count_comment = bo_count_comment + 1 where bo_table = '$bo_table' "); } if($w == '' && isset($is_direct) && $is_direct) { if ($file_upload_msg) alert($file_upload_msg, G5_HTTP_BBS_URL.'/board.php?bo_table='.$bo_table); else goto_url(G5_HTTP_BBS_URL.'/board.php?bo_table='.$bo_table); } ?>
부연설명을 드리면 $wr_write_cname과 $wr_write_mbid에 실제 닉네임과 아이디를 입력하지 않아도 무방합니다.
다만 실제 아이디를 입력하면 관리자와 해당 아이디로 접속하여 수정할 수 있고,
존재하지 않는 아이디를 입력하면 해당 게시판에 권한이 있는 관리자만 수정 가능합니다.
한편 PHP의 rand() vs mt_rand() vs random_int()에 대해 비록 제가 잘 알지는 못하지만 부연 설명을 드리면,
PHP 5.X 이하에서는 mt_rand()가 rand()보다 더 향상된 난수 알고리즘(Mersenne Twist)를 사용합니다.
그리고 random_int()는 PHP 7.X에서만 사용가능한 함수입니다.
따라서 이 스크립트에서는 mt_rand()를 선택하였습니다.
이 스크립트를 write_update.tail.skin.php 파일에 덮어쓴 다음에 새 글을 작성하시면
다음과 같이 글 작성과 동시에 댓글이 자동으로 등록되는 것을 확인할 수 있습니다.
다만 이 스크립트를 사용하면 게시글이 작성되자마자 동시에 댓글이 등록되기 때문에
실질적으로 이 스크립트를 활용할 수 있는 방법이 다소 제한되는 것 같습니다.
그렇다고 sleep()을 넣으면 게시글 등록 시간이 오래 소요되는 문제가 발생하더군요.
따라서 제가 작성한 것처럼 컴퍼니나 샵 테마를 사용할 때 질문게시판에 등록 확인 댓글을 남기거나,
커뮤니티 사이트 초기에 무플을 방지하기 위한 차원에서 사용할 수 있을 것 같습니다 ^^
허접한 스크립트에 관한 글을 읽어주셔서 감사합니다!
그럼 좋은 주말 되세요 :)