phpBB3 Syntax Highlighter 확장하기

phpBB 게시판에 글을 올릴 때 프로그램 소스 코드를 바로 넣어야 할 경우가 있다. PHP로 되어 있는 소스라면 다음처럼 입력해서 올리면 구문이 여러 색깔로 구분이 되어 훨씬 읽기에 편한 형태로 출력이 된다.

for ($i = 0; $i++; $i++) {
echo "hello";
}

그런데 phpBB 게시판에는 구문 강조기능(Syntax Highlighting)이 PHP 밖에 지원을 하지 않는다. PHP외 다른 언어에 대해 구문 강조 기능을 추가하기 위해서는 확장 프로그램을 설치하고 phpBB 소스를 수정해야 한다.

여러가지 phpBB용 구문강조기능 프로그램을 설치해 봤는데 SyntaxHighlighter 1.1.0 for PhpBB 3.0.8 가 제일 마음에 들었다. 설치도 간단하다. 사실 이것 외에는 다들 설치도 잘 되지 않았다.

설치가 끝나면 글 입력시 선택박스가 하나 추가가 된다.

 

SQL 문장을 입력했더니 이쁘게 구문 강조 기능이 동작한다.

PHP 5.2.14 윈도우용 바이너리 배포판 php.net에서 받지 마세요.

http://www.php.net/downloads.php에 있는 2010.07.21일짜 PHP 5.2.14 윈도우용 바이너리는 받지 마시기 바랍니다. zlib.dll이 포함되어 있지 않은 php_curl.dll extension을 포함하고 있어서 Invalid access to memory location 오류가 발생합니다.

http://windows.php.net/download/ 에 가셔서 7월27일짜를 받으시면 됩니다.

[PHP] Proxy 서버를 이용해서 원격 웹서버 내용 갖고 오기

이씨플라자는 중문으로 서비스되는 이씨플라자 중문 사이트가 따로 있고, 대부분의 사용자는 중국업체들이다. 서버는 현재 국내 KTNET IDC에 있다. 요즘 알 수 없는 이유(?)로 중국에서 이씨플라자 중문 사이트에 접속하는데 장애가 많이 발생해서, 이를 탐지하는 프로그램을 만들어야만 했다. 중국사용자 환경에서 접속을 테스트해야 하니깐 중국내 공개된 proxy 서버를 이용하기로 했다.

전에 올린 “MSXML2.ServerXMLHTTP 사용하여 원격 웹서버 내용 갖고 오기” 포스트에서 사용한 MSXML2.ServerXMLHTTP 컴포넌트를 사용하려고 했는데 허걱.. 이 컴포넌트는 Proxy 서버를 지정할 수 있는 방법을 제공하지 않는 것이다. 별 수 없이 막강한 함수를 갖고 있는 php를 좀 뒤져봤다. 역시 여기에는 해결책이 있었다.

Proxy 서버를 이용해서 http 통신을 하는 get_contents 라는 함수를 하나 만들어서 사용했다. 혹시나 Proxy 서버를 사용할 필요가 있으신 분들은 참고하시기를.

function get_contents($url, $proxy = "") {
    //이 부분은 반드시 필요하지는 않지만,
    //User-Agent를 체크하는 사이트가 있다면 필요함.
    $header = "User-Agent: Mozilla/4.0+(compatible;+MSIE+6.0;+Windows+NT+5.1;+SV1;)";

    if (empty($proxy)) {
        // proxy를 사용하지 않음
        $opts = array(
            'http' => array(
                'request_fulluri' => true,
                'header' => $header
            ),
        );
    } else {
        // proxy를 사용함
        $opts = array(
            'http' => array(
                'proxy' => 'tcp://'.$proxy,
                'request_fulluri' => true,
                'header' => $header
            ),
        );
    }

    $context = stream_context_create($opts);
    $html = file_get_contents($url, false, $context);
    $html;
}