예전 설명부분이 글쓴이가 보아도 너무 부실한 관계로
이해가 쉽지 않을 듯 하여 부연 설명 드립니다.
(참조 : http://docs/cena.co.kr/11819 )
1. 왜 $result[10]을 출력 하였는가?
그냥 소스를 뭉텅이로 갖다가 붙이지 않는 대부분의 프로그래머 분들이라면
해당 소스에서 출력되는 결과가 심히 궁금하실것 같습니다.
출력하기 귀찮으실것같은 분들을 위해 fget으로 뽑아냈던 전체result를 출력해보면 다음과 같죠.
——————————————————————
HTTP/1.1 200 OK
Date: Fri, 01 Apr 2011 04:19:48 GMT
Server: Apache
P3P: CP=’CAO PSA CONi OTR OUR DEM ONL’
X-Powered-By: PHP/5.2.6AnNyung-51928
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html
2
OK
0
——————————————————————
위에서 보듯 $result[10]에 우리가 원하는 값이 있으며 좀더 정확하게 따져보자면 OK 위의 2라는 숫자는 16진수값으로 본문의 길이를 나타내며,
OK 하단의 0이 출력되기 전까지의 길이를 보여줍니다.
즉 출력문이 제대로 뽑히는지를 측정하려면 길이만큼을 빼보고, 오류검사로 길이+1에 0이 찍히는지를 보면 완전한 처리가 가능합니다.
※ 위의 예시는 단순히 페이지에서 OK만 출력하는것처럼 단순히 text를 출력할때 해당되며, 문서에 따라 위의 헤더 표기는 틀려질 수 있습니다.
2. 중간에 헤더가 틀려질 경우들은?
대충 작성된 소스라 치명적인 문제를 내포하고 있는데
예를들어 session_set_cookie_params() 와 같은 함수가
포함되는 문서를 저런 형태로 처리하는경우 다음과 같은 출력을 나타내겠지요.
——————————————————————
HTTP/1.1 200 OK
Date: Fri, 01 Apr 2011 02:24:41 GMT
Server: Apache
P3P: CP=’CAO PSA CONi OTR OUR DEM ONL’
X-Powered-By: PHP/5.2.6AnNyung-51928
Set-Cookie: CENASESSID=c2877af0c8ba710af2f34a600bcb93f8; path=/; domain=.CEnA.co.kr
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html; charset=ks_c_5601-1987
2
OK
0
———————————————————————-
위의 출력과 비교해보았을때 Set-Cookie ~ Progma 까지의 내용이 추가로 들어갔기 때문에
여기서는 $result[10]이 아닌 $result[14]가 출력이 되야 하는 상황이 됩니다.
또한 문서에 따라서는..
———————————————————————-
HTTP/1.1 200 OK
Date: Mon, 04 Apr 2011 04:59:51 GMT
Server: Apache/2.2.3 (CentOS)
X-Powered-By: PHP/5.2.10
Set-Cookie: PHPSESSID=leldcc1jqkq3f98dk70bc7ta76; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Content-Length: 1538
Connection: close
Content-Type: text/html; charset=UTF-8
문서내용
———————————————————————-
식으로 Content-Length가 표기가 되고
아래에 문서 내용만 쭉 들어가는 형태도 될 수 있으므로 상황에 맞게 잘 변환해서 사용이 필요합니다.
Thanks to 미바니.
]]>
댓글 남기기