?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄 첨부
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄 첨부
Extra Form
라이선스 MIT

안녕하세요? ^^ 주말 잘 보내고 계시는가요?


이 스크립트는 아미나에서 게시글을 작성하면 자동으로 랜덤 댓글을 남기는 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()을 넣으면 게시글 등록 시간이 오래 소요되는 문제가 발생하더군요.


따라서 제가 작성한 것처럼 컴퍼니나 샵 테마를 사용할 때 질문게시판에 등록 확인 댓글을 남기거나,


커뮤니티 사이트 초기에 무플을 방지하기 위한 차원에서 사용할 수 있을 것 같습니다 ^^



허접한 스크립트에 관한 글을 읽어주셔서 감사합니다!


그럼 좋은 주말 되세요 :)


  • profile
    NoYeah 2018.11.18 10:38
    라이믹스니 xe엔 비슷한 애드온이 있어서 설치만 하면 바로 사용기능이네요!
    그누보드가 이런 부분은 좀 불편한것 같습니다. ㅠㅠ
  • profile
    이니스프리 2018.11.18 10:45

    허거걱 ㅠㅠ 라이믹스나 XE에는 이런게 이미 애드온으로 있군요 ㅜㅜ

    (검색해보니 XE 공식 자료실에 있네요)

    그누보드는 PHP 파일을 직접 수정해야 되고

    빌더마다 조금씩 다른 점이 있어서 그에 맞게 수정을 해야되어서 더욱 어려운 것 같아요 ㅠㅠ


    제가 구글링으로 찾지를 못했는데 혹시 라이믹스나 XE에 자동 글 작성 애드온이란 것은 없는지 여쭤봅니다.

    제목과 내용을 입력해놓고 실행하면 자동으로 게시글을 작성하는 애드온을 여쭤보는 것이에요.

    그럼 맛스타 님께서도 좋은 주말 되세요! 항상 감사합니다 ^^

  • profile
    NoYeah 2018.11.18 14:47
    그런 애드온은 @네모님 이 전문이니 아마 뚝딱 만드시지 않을까 생각됩니다. ㅋㅋ
  • profile
    이니스프리 2018.11.18 19:45
    허걱~! 그렇군요 ^^ 감사합니다 :)
    그럼 맛스타 님께서도 가족분들과 좋은 주말 저녁 되세요!
  • profile
    네모 2018.11.18 15:32
    그런 애드온이 사용될 곳이 있을까요?
    타 사이트에서 퍼오는 기능은 몇번 만들어 본 적이 있습니다만,
    제목과 내용이 고정된(로테이션 포함) 게시글을 자동으로 작성해봐야 의미가 없을것 같은데용.

    만들고자 한다면 어렵지 않게 만들것 같습니다만, 활용될만한 데가 있을지는 모르겠네요.
  • profile
    이니스프리 2018.11.18 20:04

    옙~ 네모 님 말씀대로 API나 정부기관의 공시 같은 것을 퍼오는 기능을 만들어보려구요 ^^

    그누보드에서는 어떻게 간신히 만들어봤는데요.

    그누보드는 그 자체는 가볍지만 빌더를 설치하면 느려지고 

    캐시 관련하여 최적화를 하려면 결국 의뢰를 할 수밖에 없는 것 같아서요.

    제가 내년에 필요하게 되면 라이믹스의 게시글 쓰기 관련 파일을 들여다보면서 하루이틀 정도 끙끙거리다가

    네모 님께 작업의뢰를 부탁드릴게요~! ㅎㅎ

    그럼 네모 님께서도 감기 조심하시고 입대 전까지 뜻깊은 시간 보내세요 :)

    네모 님께 항상 감사드립니다!!

  • profile
    이니스프리 2018.11.18 23:26

    생각해보니 대략 아래와 같은 방식으로 

    스포어의 포인트 폭탄처럼 글 작성시 랜덤 포인트를 지급하는 이벤트로 응용할 수도 있겠네요 ^-^


    $percentage = 50; // 포인트 지급 확률

    $dice = mt_rand(1, 100);

    if ($w == '' && $dice < $percentage) {

    $randpoint = mt_rand(15, 30); // 지급되는 랜덤 포인트의 범위

    $reply = array(

        "랜덤 포인트 이벤트 당첨을 진심으로 축하드립니다~!\n".$randpoint."p를 추가로 획득하셨습니다.",
        "축하드립니다! 랜덤 포인트 이벤트에 당첨되셨습니다 ^^\n".$randpoint."p를 추가 획득하셨습니다."

    );

    $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 = "bomb"; // 댓글 작성자의 아이디

    $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' ");

    insert_point($member['mb_id'], $randpoint, '포인트폭탄', $bo_table, $wr_id, $rw_id);

    }


List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
78 자료 AdBlock 접근 방지 애드온 v0.1 3 file 네모 2017.10.05 765
77 자료 AdminLTE용 에디터 스타일 4 file title: 은메달도다 2017.07.07 896
76 코드 AWSCLI, in a single file (portable, linux) 1 file Seia 2021.04.10 325
75 코드 c 이진트리 전,중,후위 알고리즘 2 title: 대한민국 국기gimmepoint 2018.04.24 737
74 코드 Cmd 에서 서비스 시작 / 종료하기 1 ProjectSE 2018.02.18 710
73 코드 CMD로 로컬 연결 고정 IP 설정하기 1 title: 황금 서버 (30일)humit 2018.02.06 1098
72 코드 C언어 삼중자를 이용한 코드 title: 황금 서버 (30일)humit 2018.07.22 504
71 자료 even_move - 감성적인 에러 페이지 7 file title: 열려라 맛스타의 자물쇠TVJ 2017.08.08 924
70 자료 Gentelella 3 file NoYeah 2017.06.29 1070
69 자료 Gentelella 레이아웃에 사용가능한 가격 테이블 위젯입니다. 3 file NoYeah 2017.07.03 715
68 코드 Git 저장소에서 자동으로 받아 업데이트하는 쉘 스크립트 5 NoYeah 2017.09.16 859
67 코드 Hello, World!를 출력해보자 18 네모 2018.04.21 723
66 코드 HEX를 RGB로, RGB를 HEX로 바꾸는 PHP 코드 1 네모 2018.05.05 758
65 코드 html 초보가 만든 자소서 4 title: 대한민국 국기gimmepoint 2018.04.21 752
64 코드 JavaScript에서 파이썬 문자열 처리 함수 중 하나 (바인딩)를 구현 7 Seia 2020.01.20 578
63 코드 Koa에서 자동으로 라우팅 채워주기 Seia 2020.01.22 739
62 자료 RBGE - 이쁘고 깔끔한 에러페이지 4 file title: 열려라 맛스타의 자물쇠TVJ 2017.08.08 789
61 자료 [1.8a] Bootstrap 'Panel' 위젯 스타일 1 file title: 은메달도다 2017.08.09 706
60 자료 [Autohotkey] 매분 정각에 전체화면을 캡쳐하는 스크립트 4 file 이니스프리 2020.05.22 1260
59 자료 [Bootstrap] xeACE 레이아웃 3 title: 은메달도다 2017.09.17 761
Board Pagination Prev 1 2 3 4 Next
/ 4