후킹 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);
하시면 출력은 될겁니다
!-->add_replace가 아니라 add_event로 하셔야 합니다.
안찍히는거는
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 를 수정안하고 사용하는 방법은 없을까요?
말씀처럼 extend 가 뒤에 있어 처리가 되지 않은게 맞습니다
훅 매뉴얼이 잘 못 되어 있는게 맞습니다
관리자님께 요청 넣어 놓겠습니다
좀더 세심하게 살펴보지 못하고 답변을 드려 죄송합니다
제가 보기에는 맞게 쓰신 거 같습니다.
run_replace() 이전에 add_replace()로 등록한 hook는 다 실행되는 것인데요.
kkkkK()가 정말 실행인 안 되는지
function kkkkk($is_authority, $mb_id){
echo 'kkkkk'; exit; }
이런 식으로 한번 확인해 보세요.
$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');
하시면 결과를 보실 수 있습니다
!-->!-->