후킹 run_replace 질문드립니다.

후킹 run_replace 질문드립니다.

QA

후킹 run_replace 질문드립니다.

본문

후킹관련 매뉴얼이나 댓글을 좀 보고 연습좀 해보고 있는데, 예상되로 안되네요.

먼가 이해를 잘못하고 있는거 같은데....

 

1. 코어화일 화일(/lib/common.lib.php)의 is_admin() 함수 의 내용을 수정하고 싶다.

2. is_admin($mb_id) 함수에

    run_replace('is_admin', $is_authority, $mb_id); 라는 내용이 있다 -> 함수 수정이 가능하다

3. 그래서, /extend 폴더안에, 

    /extend/test.extend.php 를 만든다.

    test.extend.php 에 다음과 같이 추가한다.

 

add_replace('is_admin', 'kkkkk', 10, 2);

function kkkkk($is_authority, $mb_id){

 

    if( $mb_id=='aaaa' )

        return 'super1';

     else

        return $is_authority;

 

}

 

4.  echo is_admin('aaaa');

    예상되는 결과값은 super1 인데, 예상되로 안찍히네요.

 

function kkk($is_authority, $mb_id) 까지도 못가는거 같은데, 어느부분에서 잘못이해하고 있는걸까요

이 질문에 댓글 쓰기 :

답변 6

코어 파일을 변경하실려면 구지 훅을 쓰실 이유가 없습니다

훅은 코어 수정 없이 쓰기 위해 추가된 기능입니다

구지 쓰시겠다면 is_admin 함수에


return run_replace('is_admin', $is_authority, $mb_id);

하시면 출력은 될겁니다

안찍히는거는

common.lib.php 에 있는 run_replace 보다 

extend 에 있는 add_replace가 늦게 위치해서 그런가 보네요.

 

공통라이브러리 common.lib.php 가 extend 폴더보다 먼저 읽어들이는데,

 

common.lib.php 에 있는 is_admin() 함수는  왜

return $is_authority; 이 아니라

return run_replace('is_admin', $is_authority, $mb_id); 이렇게 되어 있을까요?

 

어차피 is_admin()의 내용을 수정하고 싶다면,
common.php 나 common.lib.php를 건들수밖에 없는거 같은데..

 

common.php 나 common.lib.php 를 수정안하고 사용하는 방법은 없을까요?

일단 원본 소스에 여기 저기 훅을 적용할 수 있는 run_replace, run_event가 다수 존재합니다
add_replace, add_event 사용시에 return 값이 필요하다면
함수 안에서 변경 하실 변수를 global 지정하시고 값을 변경하시는 방법도 있습니다

말씀처럼 extend 가 뒤에 있어 처리가 되지 않은게 맞습니다

훅 매뉴얼이 잘 못 되어 있는게 맞습니다

관리자님께 요청 넣어 놓겠습니다

좀더 세심하게 살펴보지 못하고 답변을 드려 죄송합니다

 

제가 보기에는 맞게 쓰신 거 같습니다.

run_replace() 이전에 add_replace()로 등록한 hook는 다 실행되는 것인데요.

kkkkK()가 정말 실행인 안 되는지

function kkkkk($is_authority, $mb_id){

echo 'kkkkk'; exit; }

이런 식으로 한번 확인해 보세요.

매뉴얼에 extend 폴더에 대한 언급이 있습니다
이미 버그 게시판에도 올라온 내용인듯 보이는데
is_admin의 경우 extend 폴더에 파일 생성 후 add_replace를 해도
훅이 돌아가야할 타이밍에 extend 폴더를 읽지 않은 상태라
해당 훅은 동작하지 않습니다
절대 안되는 겁니다
소스 하나하나 확인하고 개인 서버 열어서 확인까지 했습니다
버그 게시판에 다시 올렸으니 답변이 있을 겁니다

$is_admin 이 전역변수라 코드개선이 어렵다

test.extend.php 파일 마지막에 is_admin 함수를 호출하는 구문을 추가해서 사용 하시라


add_replace('is_admin', 'kkkkk', 10, 2);
function kkkkk($is_authority, $mb_id){
 
    if( $mb_id=='aaaa' )
        return 'super1';
     else
        return $is_authority;
 
}
 
//is_admin 다시 호출
$is_admin = is_admin($member['mb_id']);

이렇게 쓰라고 연락을 받았습니다

 

extend 파일 읽어 들인 이후에


echo is_admin('aaaa');

하시면 결과를 보실 수 있습니다

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

회원로그인

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