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

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

QA

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

답변 5

본문

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기준입니다.

답변을 작성하시기 전에 로그인 해주세요.
QA 내용 검색
질문등록
전체 60,954
© SIRSOFT
현재 페이지 제일 처음으로