소스 공유

|  나만의 소스나 나만 알고 있는 좋은 소스를 서로 공유하는 자리입니다.

Atachment
첨부 '1'
?

단축키

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

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

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

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

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


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

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

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

  • profile
    맛스타 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
번호 분류 제목 글쓴이 날짜 조회 수
64 코드 [PyQt] sir.kr에서 스크랩한 게시글을 보여주는 윈도우앱 (검색 및 정렬 가능) 1 file 이니스프리 2019.08.09 36
63 코드 [아미나] Dropbox API를 이용한 이미지 호스팅 보드스킨 11 file 이니스프리 2019.07.13 160
62 코드 [Python] 네이버 모바일 이미지 검색에서의 이미지 파일을 멀티스레드로 다운받고 1개의 파일로 병합 10 file 이니스프리 2019.07.12 107
61 코드 [PHP/Javascript] 아미나에 자동으로 게시글을 생성하고 Ajax로 전송하여 결과를 표시하기 2 file 이니스프리 2019.07.09 46
60 코드 [Python] Selenium을 이용하여 특정 element를 캡처하는 스크립트 2 file 이니스프리 2019.07.03 93
59 코드 [Python] 선택한 파일을 Dropbox API를 이용하여 업로드하고 공유링크를 받아서 이미지 호스팅 용도로 URL을 변환하기 1 file 이니스프리 2019.07.02 75
58 자바스크립트 미니 시계 7 도토리묵 2019.02.22 320
57 코드 [JS]클라이언트에서 Ip를 얻어보자 2 title: 500포인트로 초록불 SSL!!Hanam09 2019.01.21 271
56 코드 [JS] http를 https로 리디렉션! 3 title: 500포인트로 초록불 SSL!!Hanam09 2018.12.30 314
55 코드 [PHP] 이미지를 원하는 크기(원본비율 유지)로 리사이즈 하여 출력 (원본 이미지는 수정하지 않습니다) 6 이니스프리 2018.12.20 958
54 코드 [아미나] 네이트 실시간 검색어 순위 위젯 (아미나 캐시 적용) 3 file 이니스프리 2018.12.18 285
53 코드 [아미나] 출석 여부를 나타내는 메인화면 위젯 4 file 이니스프리 2018.12.15 324
52 코드 [PHP] 간단한 캐싱 클래스 3 title: 황금 서버 (30일)humit 2018.12.06 277
51 코드 [Python] 텔레그램을 이용한 게시판 새 글 알림봇 7 이니스프리 2018.12.02 701
» 코드 [아미나] 게시글을 작성하면 ID와 IP로 필터링하여 자동으로 랜덤 댓글을 남기기 (+랜덤 포인트) 7 file 이니스프리 2018.11.18 188
49 코드 [PHP] 그누보드 자동 게시글 작성 - 일본기상협회의 우리나라 날씨를 크롤링한 후 파파고로 번역하여 글 작성 4 file 이니스프리 2018.11.15 187
48 코드 [PHP] 기상청 RSS 시간별 예보 위젯 - cache 적용(?) 9 file 이니스프리 2018.10.28 161
47 코드 [오토핫키] 브라우저를 열어 지난번과 동일한 폴더에 MZK를 다운받고 압축을 네이티브로 해제하는 스크립트 file 이니스프리 2018.10.20 227
46 코드 [PHP] 기상청 중기예보를 캐러셀로 보여주는 위젯 (매우 허접합니다 ㅠㅠ) 10 file 이니스프리 2018.09.28 185
45 코드 [오토핫키] 구글 드라이브의 공유링크를 이미지 호스팅을 위한 다이렉트 링크로 바꿔주는 스크립트 10 file 이니스프리 2018.09.25 649
목록
Board Pagination Prev 1 2 3 4 Next
/ 4
서버에 요청 중입니다. 잠시만 기다려 주십시오...