CODE CAVE

[PHP/XML] 상품목록 XML로 출력하기 본문

Web/Back-End

[PHP/XML] 상품목록 XML로 출력하기

코드케이브 2016. 8. 4. 00:40

쇼핑몰을 운영하는 회사에서 종사하시는 개발자 분들은 광고 시스템과의 연동 등의 사유로


전체 상품리스트를 XML로 뽑아야하는 경우가 있을 것이라고 생각되는데요.


이번 포스팅에서 제가 실제로 회사에서 활용한 코드를 가지고 상품 목록을 XML로 출력하는 방법에 대해서 얘기하고자 합니다.


개발 환경은 APM(Apache+PHP+MySQL) 입니다. 


PHP의 버전은 5.5구요!


소스코드는 아래와 같습니다.



<?php
header("Content-type: text/xml");
echo "<?xml version=\"1.0\" encoding=\"EUC-KR\"?>\n";

$d_root = $_SERVER['DOCUMENT_ROOT'];
include "$d_root/dbcon.php";


echo "<products>\n";
$sql = "select * from product order by no desc";
$result = mysql_query($sql);
$product_list = "";
while($product = mysql_fetch_array($result)){

echo "<product id=\"$product[id]\">\n";
$name = str_replace("&", "&amp;", $product[name]);
$pro_img_dir = str_replace("&", "&amp;", $product['img_path']);
$category = "";
if($product['cate'] == "A_type"){
$category = "기성화";
} else if($product['cate'] == "B_type"){
$category = "수제화";
} else {
$category = "기타";
}
echo "<name>$name</name>\n";
echo "<producturl>
http://domain.kr/product.php?id=".$product['id']."
</producturl>\n";
echo "<bigimage>http://domain.kr/img/".$pro_img_dir."</bigimage>\n";
echo "<price>$product[price]</price>\n";
echo "<categoryid1>$category</categoryid1>\n";
echo "</product>\n";

}
echo "</products>";
?>



제일 먼저 해야할 부분은 응답헤더 설정입니다.



웹은 기본적으로 Content-Type이 html 이므로 이것을 xml로 변경해주어야 합니다.

header("Content-type: text/xml");

주의할 점으로는 header 위에는 아무런 공백이 있어선 안됩니다.

공백이 있으면 인식하지 못할 수 있습니다.



그리고 xml 선언입니다.

저희 쇼핑몰은 euc-kr 입니다.. 

echo "<?xml version=\"1.0\" encoding=\"EUC-KR\"?>\n";

언제 날 잡아서 모두 utf-8로 바꿔야지 하고 매일 다짐하지만 그럴 시간이 안나고 있네요..


계속 프로그램이 추가될 뿐.. 이러다가 정말 점점 커져서 되돌릴 수 없을 것 같아요..


xml 버전은 제가 5년전에도 1.0이였는데 계속 1.0에서 머물러 있는건지 개인적으로 조금 궁금해지기도 하는 시간이였습니다.




아무튼 위 선언들을 다 하시고 나서 이 다음에는 디비 접속하시고 (db_con.php) 상품 목록을 가져오는 소스를 활용해서 위와 같이 작성하시면 됩니다.


여기서 유의할 점이 & 이라는 특수기호 입니다.


저희 상품에 XXX & XXXX 라는 이름을 가진 상품이 있어서 이 부분에서 에러가 나서 xml이 제대로 출력이 안되었습니다.


이 경우 str_replace 라는 php 함수를 사용하셔서 &을 &amp;로 바꿔치기 하시면 됩니다.


str_replace는 세번째 파라미터로 받은 내용 중에서 첫번째 파라미터의 값을 가지고 있는 문자열이 있다면 두번째 파라미터 문자열로 바꿔주는 역할을 합니다.


\n은 줄바꿈의 역할을 합니다.


xml 파일도 html 처럼 탭으로 구분하고 엔터로 구분해주셔야 보기 깔끔하겠죠?


프로그램 코드는 보기 좋은게 제일 잘짠 코드라고 하기도 하죠. 


혼자 만들 수 있는 프로그램이 아닌 이상 로직도 중요하지만 모두가 보기 좋은 코드가 진짜 프로그램이라고 생각 합니다.




아무튼 이런식으로 작성하시면 상품 리스트 xml 파일 작성 끝! 


실제로 크롬 개발자 도구에서 Network 탭에 가서 Response Header 쪽을 봐보시면 Content-type: text/xml 로 되어 있는 것을 확인 하실 수 있을 겁니다.



브라우저는 이 응답 헤더의 Content-type을 확인해서 이 콘텐츠는 xml이구나 혹은 html이구나 하고 그에 맞게 랜더링하여 출력해줍니다.





도움이 되셨다면 아래 공감 버튼을 꾹 눌러주세요!