본문 바로가기

카테고리 없음

PHP POST 전송 데이터가 짤릴 때!


테스트할 때는 이상이 없었는데 실제 서비스를 하기 위해서

서버도 변경하고, 조금 수정도 했더니 문제가 생겼다.


POST로 전송한 데이터가 아무런 에러도 없이 일부가 짤려서 전송되고 있었다.

보내는 곳에서는 문제가 없었는데 받는 곳에서 전송된 데이터를 다 받지 못 했다.


테스트할 때는 이상이 없었기 때문에 어디서부터 확인을 해야할 지 몰랐다.

일단 바뀐것은 서버뿐이니 서버쪽을 확인했다.


테스트는 PHP 4 버전이였고 카페24(http://www.cafe24.com)로 올린 실 서버는 PHP 5 버전이다.

그리고 SERVER_PROTOCOL이 테스트 서버는 HTTP/1.1 이고 카페24는 HTTP/1.0 이다.



먼저 SERVER_PROTOCOL 때문인가 해서 열심히 찾아 봤다.


HTTP post 길이 제한??? (있다, 없다)



그래서 cafe24쪽에 혹시 HTTP1.1로 변경할 수 있는지 확인했더니 어렵다고 한다.


* 문의 게시판에도 나와 비슷한 문의가 있었다.

https://help.cafe24.com/cs/cs_qna_view.php?idx=822213&type=answer




그럼 AJAX 등을 이용해서 나눠서 전송해야 하나 고민을 하다가

정말 HTTP/1.0 서버 프로토콜 문제인지

카페24 서버에서 POST로 전송할 동일한 데이터를 가지고 테스트를 했다.


그랬더니...



실제 운영할 프로그램보다



적은 양 (Content-Length)을 전송하는 경우도

받는 쪽에서 짤리고 있었다.


그럼 왠지 서버 프로토콜 문제는 아닌거 같아 다시 한번 검색을 했다.



테스트 서버와 실 서버(cafe24)의 차이는 server protocol 외에 php 버전 차이도 있었다.

혹시 php5에서 추가된 설정 때문은 아닐까 했는데....


* php.ini의 memory-limit, post-max-size 문제는 아니였다. cafe24에서는 비교적 넉넉한(?) 설정을 잡고 있었다.



PHP POST 전송 데이터의 일부가 어느날 갑자기 유실된다면



역시 생각대로 추가된 설정이 있었다.
그래서 테스트로 작성한 파일에서 max_input_vars의 기본값을 1000에서 2000으로 늘려봤다.

* 많은 수의 input 데이터를 post로 전송해야 하는데 여기서 문제가 발생한 거다.



ini_set('max_input_vars', 2000);


하지만 여전히 post로 전송한 데이터가 짤리고 있었고

max_input_vars는 내가 설정한 2000으로 바뀌지도 않았다.


서버 설정(php.ini)를 바꿀 수 있으면 좋지만 카페24에서 호스팅을 받고 있어 그것도 쉽지 않다.


또, 검색이다! ^^



setting max_input_vars PHP.ini directive using ini_set



max_input_vars는 PHP_INI_PERDIR 모드에서 변경할 수 있어 ini_set 으로 변경할 수 없다고 한다.


http://www.php.net/manual/en/configuration.changes.modes.php

http://us3.php.net/manual/en/info.configuration.php#ini.max-input-vars ( PHP 5.3.9 이상 )


그래서 .htaccess에서 


PHP_VALUE max_input_vars 2000


이렇게 설정을 했더니 문제 없이 해결할 수 있었다.