1

주제: 오늘의 짝프로그래밍의 결과

2009년 2월 14일 토요일

StudioEgo와 Hoyajigi가 홍대정문앞에 있는 스타벅스 홍대정문점에서 만나서 구글맵 플러그인 소스를 공부를 해보았습니다. (실은 소스보면서 머리 싸매면서 고생했음)

3시간동안 구글맵 플러그인 소스를 보면서 어떻게 돌아가는지에 대해서 이야기를 많이 해보았습니다.

소스를 보면서  한 포스트에 구글맵 2개 밖에 안들어가는 문제에 대해 궁금해하였습니다.
구글맵 설명서에도 그런 내용 없는거 같고 플러그인에서 표시 할 때도 별 문제 없는거 같은데 왜 2개밖에 안들어갈까에 대해서 생각을 많이 해보았습니다.
print_r()로 모든 변수를 다 찍어 보았는데 머리 깨지는 줄 알았습니다.

GoogleMap/index.php 에서 구글맵을 블로그에 출력을 해주는 것을 소스 분석하면서 알게 되었습니다.
그러다

function GoogleMap_View($target, $mother)

이 함수가 Google Map치환자를 블로그에 출력을 하는 것을 알게 되었죠.

한 포스트에서 구글맵을 2개까지 출력하는데에는 정상적으로 돌아가는데 한 포스트에서 구글맵을 5개이상 출력을 해보니깐 2개만 출력되는 것 같습니다.

while (preg_match('/\[##_GoogleMap\|(([^|]+)\|)?_##\]/', $target, $matches, PREG_OFFSET_CAPTURE, $offset) > 0)

에서 한 포스트에서 여러개의 구글맵을 출력한다는 것을 알게 되었지요.

소스코드만 보면 한 포스트에 여러개의 구글맵이 돌아가는 것같은데 실제로 블로그 포스트를 보면 정작 2개만 표시되고 나머지는 치환자로만 보게 됩니다.

그래서 의심되는 코드 부분을 print_r()함수로 출력해보게 되었습니다.

$target = substr_replace($target, $output, $matches[0][1], strlen($matches[0][0]));
$offset += $matches[0][1] + strlen($output);

소스코드에서 $offset 부분을 제거해 보았습니다.

$offset += $matches[0][1] + strlen($output);

이 소스코드에서 주석처리만 해보니 한 포스트에서 5개 이상의 구글 맵이 출력되는 것을 확인하게 되었습니다.

$offset 이 어디에 쓰는지 몰라서 주석처리한 것뿐인데 주석처리만 하였더니 잘 돌아갈 뿐이였습니다......

이 소스코드를 우선 commit을 하게 되긴 하였다만 $offset이 어디쓰는지 몰라서 여쭈어 보는데 어디에 쓰는 건가요?

$offset을 어디서 쓰긴 하니깐 돌아가는 것 같은데 정확한 용도를 모르겠습니다.

이것때문에 3시간동안 삽질을 해보았습니다.

오늘 짝프로그래밍을 해보면서 호야지기님이나 저나 구글맵 API나 자바스크립트 공부를 죽어라 해야할것을 심각하게 생각했습니다.
오늘 짝프로그래밍의 후기였습니다.

2

답글: 오늘의 짝프로그래밍의 결과

흠, 저게 preg_match 함수에서 몇 번째 문자부터 검색을 시작할 것인지 지정하는 파라메터인데 값 계산에서 edge에 걸렸나보군요.;; 혹시

$offset += $matches[0][1] + strlen($output) - 1;

이렇게 하면 어떻게 될까요? =3=3

그나저나 내일이 네트웍 프로젝트 듀라 신경을 못써드려서 죄송합니다. ㅠ_ㅠ

문제의 답은 우리 안에 있다.
내면에 귀를 기울여 보자.