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

본문 바로가기
사이트 내 전체검색

phpWin

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

페이지 정보

작성자 BiHon 댓글 0건 조회 2,856회 작성일 07-09-10 21:58

본문

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 추가 등 해줘야 한다.

끝.

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

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

댓글목록

등록된 댓글이 없습니다.

회원로그인


Copyright © 1998~2019 DreamPHP.com All rights reserved.