요약해서 말씀드리면, shp 파일 자체를 PHP에서 직접 읽는 게 아니라, 함께 있는 DBF 파일을 dbase 확장으로 읽어서 속성 데이터만 처리하시면 됩니다. 좌표(도형) 정보는 PHP 단독으로 다루기엔 한계가 있어서 보통 다른 도구를 병행합니다.
먼저 전제부터 정리하면, shapefile은 최소 3개 파일이 한 세트입니다. .shp는 실제 도형(좌표), .shx는 인덱스, .dbf는 속성 데이터(테이블)입니다. PHP의 dbase 확장으로 다룰 수 있는 건 DBF 파일뿐입니다.
1️⃣ dbase 확장 설치 및 활성화
리눅스(Ubuntu 기준)
sudo apt-get install php-dbase
sudo service apache2 restart
확인
phpinfo();
또는
var_dump(function_exists('dbase_open'));
true가 나오면 정상입니다.
⚠️ 참고 최신 PHP(8.x)에서는 dbase 확장이 기본 저장소에서 빠진 경우가 많습니다. 이 경우 PHP 7.x 환경 또는 PECL 설치를 고려해야 합니다.
2️⃣ DBF 파일 열기 기본 예제
$dbf = dbase_open('/path/to/file.dbf', 0);
if (!$dbf) {
die('DBF 파일을 열 수 없습니다.');
}
$recordCount = dbase_numrecords($dbf);
$fieldInfo = dbase_get_header_info($dbf);
for ($i = 1; $i <= $recordCount; $i++) {
$row = dbase_get_record_with_names($dbf, $i);
if ($row['deleted']) continue;
// 예시 출력
echo $row['TRAIL_NAME'];
}
dbase_close($dbf);
중요 포인트
- 레코드 인덱스는 1부터 시작
dbase_get_record_with_names()를 쓰면 컬럼명이 키로 나와서 편함
deleted 필드는 항상 체크
3️⃣ 한글 깨짐 문제 처리
DBF는 대부분 EUC-KR 또는 CP949로 저장돼 있습니다.
$value = iconv('EUC-KR', 'UTF-8', $row['NAME']);
한글이 깨진다면 거의 100% 인코딩 문제입니다.
4️⃣ shp 좌표 데이터는 어떻게 하나요?
PHP만으로 .shp를 직접 파싱하는 건 비추천입니다. 현실적인 방법은 다음 중 하나입니다.
-
ogr2ogr (GDAL) 사용해서 변환
ogr2ogr -f GeoJSON output.json input.shp
→ PHP에서 JSON 처리
-
PostGIS에 적재
shp2pgsql input.shp trails | psql
→ PHP에서는 DB 조회만 담당
-
QGIS / Python에서 전처리 → 결과를 JSON/CSV로 넘김
실무에서는 PHP는 DBF + 변환된 결과를 읽는 역할만 맡기는 게 가장 안정적입니다.
5️⃣ 결론 정리
dbase 확장은 DBF 파일 읽기 전용
- shp의 속성 데이터 확인·조회는 문제 없음
- 좌표 처리까지 PHP로 하려 하지 말 것
- GDAL + JSON 변환 후 PHP 연동이 가장 깔끔
즉, DBF는 PHP(dbase), 좌표는 외부 도구 이 조합이 정답에 가깝습니다. 이렇게 구성하시면 등산로 정보 처리도 충분히 안정적으로 가능합니다.