비밀번호

  • phpWin - SearchZipcode - 우편번호 검색 (sqlite) ##

  • 짧은주소 : http://dreamphp.com/s/e0f

  • 작 성 자 : BiHonHomepage

  • 조 회 수 : 2752

  • 등 록 일 : 2007-09-10 21:58:26

  • 1. ETPOST에서 최신 우편번호 파일을 다운받는다.
    한글 우편번호파일(Excel) 기존형태

    2. 압축을 풀고 MS Excel로 열어준다.

    3. db에 입력할 때 '(single quator)는 2개('') 써줘야 한다.
    Ctrl + H (찾기 및 바꾸기) 에서 '를 ''로 바꿔준다.
    (2007년 7월 4일자, I9149, K9149의 아파트명에만 '가 있다.)

    4. 다른 이름으로 저장 -> 파일 형식 : CSV (쉼표로 분리) (*.csv) 로 저장한다.
    "~에는 CSV (쉼표로 분리) 형식이 지원하지 않는 기능이 있습니다. ~ 저장하시겠습니까?"란
    정보창이 뜨는데 무시하고 저장한다.

    1차 준비 끝.

    ================================================================================

    csv든 일반 txt 파일이든 직접 문자열을 검색해도 되지만
    sqlite를 이용해 효율을 높이자.
    서버에서 작업을 하거나 sAPM 등 작업 가능한 환경 하에서 파일 처리를 해준다.

    <?php

        error_reporting(E_ALL);
        set_time_limit(0);

        // DB 및 우편번호 파일 설정
        $dbfile = 'zipcode.db';
        $zipfile = 'zipcode.csv';

        // 새로 만드는게 목적이기 때문에 기존 DB 파일이 있다면 삭제
        if ( is_file($dbfile) ) unlink($dbfile);

        // DB 파일 생성(열기)
        $db = sqlite_open($dbfile);
        if ( !$db ) die('데이터베이스 열기 실패');

        // 테이블 생성
        sqlite_query($db, 'CREATE TABLE zipcode(uid INTEGER PRIMARY KEY, zipcode TEXT, address TEXT)');

        /*
        0          1          2          3        4        5    6      7      8                  9          10
        --------   --------   --------   ------   ------   --   ----   ----   ----------------   --------   ----
        우편번호 / 일련번호 / 주    소 /        /        /    /      / 번지 / 아파트/건물명    / 변경일   / 주소
                 /          / 시도     / 시군구 / 읍면동 / 리 / 도서 /      /                  /          /

        210-600  / 006      / 강원     / 강릉시 /        /    /      /      / 강릉우체국사서함 / 20040517 / 강원 강릉시 강릉우체국사서함
        :
        */
        // 우편번호 데이터에서 필요 정보만 테이블에 삽입
        $content = file_get_contents($zipfile);
        $content = str_replace("\r",'',$content);
        $data = explode("\n",$content);
        $size = count($data) - 1;
        $query = "BEGIN TRANSACTION;\n";
        for ($i=2;$i<$size;$i++)
        {
            if ( $i%1000==0 ) {
                echo $i.'/'.$size."<br />\n";
                flush();
            }
            $one = explode(',',$data[$i]);
            $query.= "INSERT INTO zipcode VALUES (NULL,'{$one[0]}','{$one[10]}');\n";
        }
        $query.="COMMIT;\n";
        sqlite_query($db,$query);

        // DB 닫기
        sqlite_close($db);

    ?>
    대충 이렇게 하면 zipcode.db 파일이 생성된다.
    반복문 안에서 데이터 삽입하면 시간이 많이 걸리기 때문에
    질의문을 확보 후 한번에 커밋(Commit).

    2차 준비가 끝났다.

    ================================================================================

    phpWin의 기본 예제를 그대로 복사 후 SearchZipcode란 이름으로 변경한다.
    zipcode.db 파일을 project 디렉토리에 복사한다.
    창의 크기, 주소 입력란, 검색버튼, 리스트박스 등 폼을 배열한다.

    검색 버튼을 누르면 해당 검색어(주소일부)가 포함된 데이터를 확보, 리스트박스에 뿌려준다.

    $result = sqlite_query($db,"SELECT * FROM zipcode WHERE address='%[검색어]%'");

    AlarmNA의 소스를 활용하면 손쉽게 구현 가능하다.

    아참. php 4버전용 php_sqlite.dll 추가 등 해줘야 한다.

    끝.

    ================================================================================

    폐쇄를 앞두고 있기 때문에 실제 실행 파일 및 소스 일체는 생략한다.

+ 이름

- 홈페이지

+ 내용

+ 비밀번호

* 4~20자

+ CAPTCHA

CAPTCHA Image [새로고침] (대소문자 무시)