shell script에서 그누보드 쪽지 보내기

shell script에서 그누보드 쪽지 보내기

QA

shell script에서 그누보드 쪽지 보내기

본문

linux shell script에서 특정인에게 메세지를 보내는 프로그램을 만들고 싶습니다.

 

예를 들면 아래와 같을것 같은데 ..

------------------------

#!/bin/csh -f 

....

php 특정인 메세지내용 memo.php(실행php)

...

------------------------

 

인것 같은데, argument를 어떻게 줘야 할지, 어떤 php를 사용해야 할지 잘 모르겠습니다.

제가 생각한게 아닐 수도 있으니, 무식하더라도 용서 바랍니다.

 

미리 감사드립니다.

 

 

 

 

 

 

 

이 질문에 댓글 쓰기 :

답변 5

안녕하세요? 

말씀하신 기능을 예전에 Python으로 구현한 적이 있습니다 ^^

(Python Requests로 로그인부터 구현한 것이라서 조금 더 복잡하기는 합니다.)

 

/bbs/memo_form_update.php 파일이 쪽지 보내기와 관련된 부분이며,

위 PHP 파일에서 결국 DB에 CRUD가 일어나는 부분은 62~68행입니다.

POST 전송으로 'me_recv_mb_id'에 받는 사람의 ID를,

'me_memo'에 보낼 내용을 기재하여 전송하면 됩니다.

(쪽지 전송시 캡챠를 입력하도록 설정한 경우에는 캡챠값도 전송해야 합니다.)

 

말씀하신 내용을 Linux shell script로 구현하려면

1. Curl을 이용하여 POST 전송을 하거나

2. /bbs/memo_form_update.php 파일의 POST를 GET으로 바꾸어서 별도의 파일을 만든 후

해당 URL에 parameter를 넣어서 실행하면 작동할 것입니다 ^^

 

결론적으로 /bbs/memo_form_update.php 파일을 활용하면 가능합니다 :)

그럼 편안한 주말 저녁 되세요~!

혹시 어떤 에러메시지가 뜨는가요? ^^
에러메시지를 알면 도움을 바로 드릴 수 있을 것 같은데요~
혹시 브라우저나 Postman에서 위 주소를 입력해보셨는가요??
간혹 curl이 header 때문에 막히는 경우도 있거든요 ㅜㅜ

제가 밖에 있어서 급하게 하느라 마개조이긴 한데 브라우저나 Postman에서 GET 전송으로 테스트해보시겠어요?
https://URL/folder/memo_form_update2.php?me_recv_mb_id=받는사람ID&me_memo=내용&mb_id=보내는사람ID
제가 테스트해보니 보낸 사람과 받는 사람 모두 쪽지가 잘 뜨네요! ^-^
만약 원격 접속으로 처리할 필요가 없다면 $argv로 인자를 받아서 해결하실 수도 있어요~
부디 해결이 잘 되셨으면 좋겠습니다!!


<?php
include_once('./_common.php');
include_once(G5_CAPTCHA_PATH.'/captcha.lib.php');

//if ($is_guest)
//    alert('회원만 이용하실 수 있습니다.');

//if (!chk_captcha()) {
//    alert('자동등록방지 숫자가 틀렸습니다.');
//}

$recv_list = explode(',', trim($_GET['me_recv_mb_id']));
$str_nick_list = '';
$msg = '';
$error_list  = array();
$member_list = array();
for ($i=0; $i<count($recv_list); $i++) {
    $row = sql_fetch(" select mb_id, mb_nick, mb_open, mb_leave_date, mb_intercept_date from {$g5['member_table']} where mb_id = '{$recv_list[$i]}' ");
    if ($row) {
        if ($is_admin || ($row['mb_open'] && (!$row['mb_leave_date'] || !$row['mb_intercept_date']))) {
            $member_list['id'][]  = $row['mb_id'];
            $member_list['nick'][] = $row['mb_nick'];
        } else {
            $error_list[]  = $recv_list[$i];
        }
    }
    /*
    // 관리자가 아니면서
    // 가입된 회원이 아니거나 정보공개를 하지 않았거나 탈퇴한 회원이거나 차단된 회원에게 쪽지를 보내는것은 에러
    if ((!$row['mb_id'] || !$row['mb_open'] || $row['mb_leave_date'] || $row['mb_intercept_date']) && !$is_admin) {
        $error_list[]  = $recv_list[$i];
    } else {
        $member_list['id'][]  = $row['mb_id'];
        $member_list['nick'][] = $row['mb_nick'];
    }
    */
}

$error_msg = implode(",", $error_list);

if ($error_msg && !$is_admin)
    alert("회원아이디 '{$error_msg}' 은(는) 존재(또는 정보공개)하지 않는 회원아이디 이거나 탈퇴, 접근차단된 회원아이디 입니다.\\n쪽지를 발송하지 않았습니다.");

//if (!$is_admin) {
//    if (count($member_list['id'])) {
//        $point = (int)$config['cf_memo_send_point'] * count($member_list['id']);
//        if ($point) {
//            if ($member['mb_point'] - $point < 0) {
//                alert('보유하신 포인트('.number_format($member['mb_point']).'점)가 모자라서 쪽지를 보낼 수 없습니다.');
//            }
//        }
//    }
//}

for ($i=0; $i<count($member_list['id']); $i++) {
    $tmp_row = sql_fetch(" select max(me_id) as max_me_id from {$g5['memo_table']} ");
    $me_id = $tmp_row['max_me_id'] + 1;

    $recv_mb_id  = $member_list['id'][$i];
    $recv_mb_nick = get_text($member_list['nick'][$i]);

    // 쪽지 INSERT
    $sql = " insert into {$g5['memo_table']} ( me_id, me_recv_mb_id, me_send_mb_id, me_send_datetime, me_memo, me_read_datetime ) values ( '{$_GET['mb_id']}', '$recv_mb_id', '{$_GET['mb_id']}', '".G5_TIME_YMDHIS."', '{$_GET['me_memo']}', '0000-00-00 00:00:00' ) ";
    sql_query($sql);

    // 실시간 쪽지 알림 기능
    $sql = " update {$g5['member_table']} set mb_memo_call = '{$member['mb_id']}' where mb_id = '$recv_mb_id' ";
    sql_query($sql);

    if (!$is_admin) {
        insert_point($member['mb_id'], (int)$config['cf_memo_send_point'] * (-1), $recv_mb_nick.'('.$recv_mb_id.')님께 쪽지 발송', '@memo', $recv_mb_id, $me_id);
    }
}

if ($member_list) {
    $str_nick_list = implode(',', $member_list['nick']);
    alert($str_nick_list." 님께 쪽지를 전달하였습니다.", G5_HTTP_BBS_URL."/memo.php?kind=send", false);
} else {
    alert("회원아이디 오류 같습니다.", G5_HTTP_BBS_URL."/memo_form.php", false);
}
?>

Innisfree  님, 설명해 주신 방법대로 쪽지가 나가는  거 확인 했습니다.

https://URL/folder/memo_form_update2.php?me_recv_mb_id=받는사람ID&me_memo=내용&mb_id=보내는사람ID

그런데 이거를 linux command 나, shell script에서는 어떻게 넣야 할까요 ?

제가 무식한 질문을 하셔도 너무 다들 친절하게 답변해 주셔서 감사합니다.

방금 전  요렇게 해보니 쪽지가 가는 군요 ...

curl "http://localhost:8080/g5/bbs/memo_form_update.php?me_recv_mb_id=jace&me_memo=fuck4&me_send_mb_id=admin"

그런데 보낸 사람이 표시가 안되는데, 뭘까요?
항상 감사드립니다.

일단 쪽지가 전송되는 것까지는 확인하셨다니 다행이네요~! :)
제가 어제 올려드린 스크립트에서는 me_send_mb_id가 아니라 mb_id를 파라미터로 받고 있고
여기에 입력한 아이디가 보내는 사람으로 표시가 되어요~
저희 회사 보안규정 때문에 제 서버에 접속을 못 하고 있는데
제가 퇴근 후에 깔끔하게 정리해드리겠습니다 ^^
(CURL 사용하지 않고 처리하는 방법도 말씀드리겠습니다)

CURL 사용하지 않도록 작성했어요~
php /폴더/bbs/memo_form_update3.php 보내는사람ID 받을사람ID 메모내용
이렇게 사용하시면 됩니다 ^-^
테스트해보니 잘 작동하고 메모내용에 띄어쓰기를 하시려면
"Hello world" 이렇게 큰 따옴표로 쓰시면 됩니다 :)
그럼 즐거운 휴일 되세요~!

#!/usr/bin/php
<?php
include_once('./_common.php');

$me_send_mb_id = $argv[1];
$recv_mb_id_temp = $argv[2];
$me_memo = $argv[3];


$recv_list[0] = $recv_mb_id_temp;
$str_nick_list = '';
$msg = '';
$error_list  = array();
$member_list = array();
for ($i=0; $i<count($recv_list); $i++) {
    $row = sql_fetch(" select mb_id, mb_nick, mb_open, mb_leave_date, mb_intercept_date from {$g5['member_table']} where mb_id = '{$recv_list[$i]}' ");
    if ($row) {
        if ($is_admin || ($row['mb_open'] && (!$row['mb_leave_date'] || !$row['mb_intercept_date']))) {
            $member_list['id'][]  = $row['mb_id'];
            $member_list['nick'][] = $row['mb_nick'];
        } else {
            $error_list[]  = $recv_list[$i];
        }
    }
}

for ($i=0; $i<count($member_list['id']); $i++) {
    $tmp_row = sql_fetch(" select max(me_id) as max_me_id from {$g5['memo_table']} ");
    $me_id = $tmp_row['max_me_id'] + 1;

    $recv_mb_id  = $member_list['id'][$i];
    $recv_mb_nick = get_text($member_list['nick'][$i]);

    // 쪽지 INSERT
    $sql = " insert into {$g5['memo_table']} ( me_id, me_recv_mb_id, me_send_mb_id, me_send_datetime, me_memo, me_read_datetime ) values ( '$me_id', '$recv_mb_id', '$me_send_mb_id', '".G5_TIME_YMDHIS."', '$me_memo', '0000-00-00 00:00:00' ) ";
    sql_query($sql);

    // 실시간 쪽지 알림 기능
    $sql = " update {$g5['member_table']} set mb_memo_call = '$me_send_mb_id' where mb_id = '$recv_mb_id' ";
    sql_query($sql);
}
?>

DB에 접속을 못해서 SQL 문이 실행되지 않았네요~
data 폴더의 dbconfig.php가 문제인 것으로 보이는데 확인해보세요 ^^

define('G5_MYSQL_HOST', 'localhost:DB포트');
define('G5_MYSQL_USER', '유저명');
define('G5_MYSQL_PASSWORD', '비밀번호');
define('G5_MYSQL_DB', 'DB명');

MySQL이면 포트가 3306입니다.
localhost를 실제 사용 중인 IP로 변경해야 되는 경우도 있는데
이건 사용하는 VPS나 호스팅에 따라서 다른 부분이라서 제가 일률적으로 말씀드리기가 어렵네요 ㅠㅠ

겟으로 보내야되지 않을까요?

$memo.php?mb_id=아이디&content=내용

 

$_get 으로 보낼수있다면 그렇게해서 보내면 될듯한데

일단 제가 쉘스크립트로 안해봐서..

$memo.php?mb_id=아이디&content=내용 요런식을 쉘에선
memo.php 내용에
$mb_id = $argv[1];

$content = $argv[2];
요렇게 할당하고
쉘에서 호출할때 memo.php 아이디 내용 

형식으로 사용했던 기억이 있네요.
맞을려나 몰겠슴다.

아 bash기준입니다.

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

회원로그인

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