linux shell script에서 특정인에게 메세지를 보내는 프로그램을 만들고 싶습니다.
예를 들면 아래와 같을것 같은데 ..
------------------------
#!/bin/csh -f
....
php 특정인 메세지내용 memo.php(실행php)
...
------------------------
인것 같은데, argument를 어떻게 줘야 할지, 어떤 php를 사용해야 할지 잘 모르겠습니다.
제가 생각한게 아닐 수도 있으니, 무식하더라도 용서 바랍니다.
미리 감사드립니다.
답변 5개 / 댓글 12개
안녕하세요?
말씀하신 기능을 예전에 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 파일을 활용하면 가능합니다 :)
그럼 편안한 주말 저녁 되세요~!
답변에 대한 댓글 11개
에러메시지를 알면 도움을 바로 드릴 수 있을 것 같은데요~
혹시 브라우저나 Postman에서 위 주소를 입력해보셨는가요??
간혹 curl이 header 때문에 막히는 경우도 있거든요 ㅜㅜ
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);
}
?>
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 사용하지 않고 처리하는 방법도 말씀드리겠습니다)
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);
}
?>
MySQL Host,User, Password, DB 정보에 오류가 있습니다.
라고 나오는데 뭐가 잘못됐을까요? 정말 너무너무 미리 감사합니다.
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나 호스팅에 따라서 다른 부분이라서 제가 일률적으로 말씀드리기가 어렵네요 ㅠㅠ
1)
php memo.php 특정인 메세지내용
2)
* memo.php
#!/usr/bin/php
<?php
$to = $argv[1];
$msg = $argv[2];
$memo.php?mb_id=아이디&content=내용 요런식을 쉘에선
memo.php 내용에
$mb_id = $argv[1];
$content = $argv[2];
요렇게 할당하고
쉘에서 호출할때 memo.php 아이디 내용
형식으로 사용했던 기억이 있네요.
맞을려나 몰겠슴다.
아 bash기준입니다.
메시지 내용은 어떻게 받아(만들어) 오나요?
겟으로 보내야되지 않을까요?
$memo.php?mb_id=아이디&content=내용
$_get 으로 보낼수있다면 그렇게해서 보내면 될듯한데
일단 제가 쉘스크립트로 안해봐서..
답변에 대한 댓글 1개
답변을 작성하려면 로그인이 필요합니다.