게시 요청의 크기 제한은 무엇입니까?


268

이것이 중복되면 죄송합니다. 그렇지만 아무것도 찾을 수 없다고 생각합니다.

IE를 통해 PHP / MySQL 서버에 데이터를 다시 게시하는 플렉스 응용 프로그램이 있습니다. 나는 아직 어떤 문제도 겪지 않았지만, 이것을 미리 알면 많은 좌절과 노력을 구할 수 있습니다. http를 통해 데이터를 게시하는 데 크기 제한이 있습니까?

이 기사는 아니오라고 말합니다 : http://www.netlobo.com/ie_form_submit.html

이 토론은 그렇습니다 : http://bytes.com/topic/php/answers/538226-what-maximum-limit-using-post-method

그리고 그것은 모두 내가 온라인에서 찾을 수있는 것을주고받습니다. 따라서 개인적으로 테스트 / 확인 된 번호로 답변을 제한 하십시오 .

꽤 큰 XML 문자열 (예 : 최대 5mb)을 다시 게시하려고합니다.

차이가있는 경우 : 브라우저는 항상 IE (우리 제품에는 필요), 게시는 http : // flex, 웹 서버는 PHP, DB는 mySql입니다.


답변:


203

서버 구성에 따라 다릅니다. Linux 또는 이와 유사한 환경에서 PHP로 작업하는 경우 다음과 같이 .htaccess 구성 파일을 사용하여 PHP를 제어 할 수 있습니다.

#set max post size
php_value post_max_size 20M

그리고 네, 개인적으로 이것이 작동한다는 사실을 증명할 수 있습니다 :)

IIS를 사용하는 경우이 특정 값을 어떻게 설정했는지 전혀 모릅니다.


3
post_max_size설정 은 어디에 있습니까 ? 나는 PHP에 익숙하지 않으며 코드베이스에서 dreamWeaver find-all 프로세스를 사용하여 어디서나 찾을 수 없습니다. 시스템 관리자에게 물어 봤지만 의미가 있습니다. :-P
invertedSpear

10
이 값을 원하는 크기로 설정할 수 있습니까? 어떤 종류의 프로토콜 제한이 없습니까? 999999999999999999999M으로 설정할 수 있습니까?
Para

8
@Para- 이 게시물 에서는 기기의 메모리만큼 높게 설정할 수 있다고 말합니다. 또한 기본값은 2MB입니다.
RustyTheBoyRobot

37
이것이 PHP이기 때문에, 나는 그것이 당신의 기계 한계에 도달했을 때 어떤 값을 받아들이고 단지 SEGFAULT를 받아들이기를 기대하고 있었다 ....
RustyTheBoyRobot

12
또한 PNP.INI 파일에는 다음과 같은 설정이 있습니다 : max_input_vars 내 버전의 PHP : 5.4.16의 기본값은 1000입니다. 매뉴얼에서 : "수용 가능한 입력 변수 수 ($ _GET, $ _POST 및 $ _COOKIE superglobal 별도로) "참조 : php.net/manual/en/info.configuration.php#ini.max-input-vars
Nikolay Ivanov

73

요청의 URL 부분 (GET 및 POST)은 브라우저와 서버 모두에 의해 제한 될 수 있습니다. 일반적으로 더 작은 제한을 사용하는 브라우저 나 서버가 거의 없으므로 안전한 크기는 2KB입니다.

요청 본문 (POST)은 일반적으로 서버에 의해 DoS 공격 유형을 방지하기 위해 바이트 크기별로 제한됩니다 (이는 문자 이스케이프가 본문의 바이트 크기를 늘릴 수 있음을 의미합니다). 가장 일반적인 서버 설정은 10MB이지만 모든 인기있는 서버는 설정 파일 또는 패널을 통해이를 늘리거나 줄일 수 있습니다.

* 구형 휴대 전화 나 기타 소형 장치 브라우저에는 예외가 있습니다.이 경우 장치에서이 용도로 예약 된 힙 공간의 기능보다 더 중요합니다.


2
고려 브라우저 제한에 대해 뭔가를 말해curl
Yugal Jindle

12
나는 여기에 약간 뒤쳐져 있음을 알고 있지만 이러한 대답은 내가 StackOverflow를 좋아하는 이유입니다. 필요한 것 이상으로 중요한 배경 정보를 제공합니다.
Dormouse


14

php.ini 변수를 설정하여 많은 양의 데이터를 게시 할 수 있습니다 : max_input_vars 이 변수의 기본 크기는 1000이지만 많은 양의 데이터를 보내려면 그에 따라 크기를 늘려야합니다. ini_set에서 크기를 설정할 수 없다면 htaccessphp.ini 파일을 직접 변경하거나 변경해야합니다.

max_input_vars  2500
memory_limit    256M

5

David가 지적했듯이 대부분의 경우 KB를 사용합니다.

php_value post_max_size 2KB

참고 : 내 양식은 간단하지만 긴 텍스트가 아닌 몇 개의 텍스트 상자입니다.


2

기본적으로 사후 요청의 최대 크기는 8mb입니다. 그러나 요구 사항에 따라 수정할 수 있습니다. php.ini 파일 (php 구성 설정)을 열어서 수정할 수 있습니다.

찾기

post_max_size=8M  //for me, that was on line:771

요구 사항에 따라 8을 교체하십시오.


1

한계가 있는지 결정하는 것은 http 서버에 달려 있습니다. 내가 작업하는 제품을 통해 관리자는 제한을 구성 할 수 있습니다.


또한 PNP.INI 파일에는 다음과 같은 설정이 있습니다 : max_input_vars 내 버전의 PHP : 5.4.16의 기본값은 1000입니다. 매뉴얼에서 : "수용 가능한 입력 변수 수 ($ _GET, $ _POST 및 $ _COOKIE superglobal 별도로) "참조 : [ php.net/manual/en/info.configuration.php#ini.max-input-vars][1] [1] : php.net/manual/en/info.configuration .php # ini.max-input-vars
Nikolay Ivanov

1

이를위한 최상의 솔루션 중 하나는 여러 입력 필드를 1,000 개 이상 사용하지 않는 것입니다. 예를 들어, 특수 문자를 사용하여 여러 입력을 연결할 수 있습니다. @.

이것 좀 봐:

<input type='text' name='hs1' id='hs1'>
<input type='text' name='hs2' id='hs2'>
<input type='text' name='hs3' id='hs3'>
<input type='text' name='hs4' id='hs4'>
<input type='text' name='hs5' id='hs5'>

<input type='hidden' name='hd' id='hd'>

스크립트 (JavaScript 또는 JScript)를 사용하여

document.getElementById("hd").value = document.getElementById("hs1").value+"@"+document.getElementById("hs2").value+"@"+document.getElementById("hs3").value+"@"+document.getElementById("hs4").value+"@"+document.getElementById("hs5").value

이를 통해 max_input_vars문제 를 무시하게됩니다 . max_input_varsphp.ini 파일 을 늘리면 더 많은 서버 캐시 메모리를 사용하기 때문에 서버에 해로운 영향을 미치며 때로는 서버에 충돌을 일으킬 수 있습니다.


1
변수를 연결하여 메모리를 절약하는 방법을 모르겠습니다. 각 ASCII 문자는 1 바이트의 메모리를 사용합니다. 문자열 (기술적으로 실수하지 않은 경우 char 배열)은 n * 1 바이트를 n과 문자열 길이로 사용합니다. 다른 문자를 추가하면 사용되는 메모리가 감소하는 이유는 무엇입니까? 이 계산에서는 문자열에 추가하는 각 '@'에 대해 다른 바이트를 추가합니다. 물론 당신은 사용되는 변수의 수를 줄이지 만 추가 작업으로 다시 "분할"하여이 "승리"를 지불합니다.
DBX12

2
@ DBX12이 트릭으로 메모리를 절약하지는 않지만이 max_input_vars옵션 을 사용하지 않아도 php.ini됩니다. 정확히 무엇을 요구했지만 여전히 유용합니다.
RicoBrassers

크기 제한 초과는 두 가지 요소, 즉 개별 키 / 값 문자열 크기, 즉 키 및 / 또는 값 측면의 문자 수에 따라 다릅니다. 둘째, 각 쌍의 문자 수가 적더라도 키 / 값 쌍의 양. 전체적으로 위의 두 가지 요인으로 인해 크기 제한이 문제를 초과합니다. 그래서 나 에게이 대답은 정확하고 질문과 관련이 있으며 문제의 한면을 강조합니다.
Elnur Shabanov

0

웹 호스팅으로 인해 PHP 구성을 변경할 수없는 개발자에게 적합합니다. (내 설정 256MB 최대 크기, 최대 1000 변수)

하위 구조가있는 5 개의 빅 데이터 개체 (연관 배열) 중 2 개만 서버 측에서 수신 한 것과 동일한 문제가 발생했습니다.

게시물 요청에서 전체 하위 구조가 "평평 해짐"을 발견했습니다. 따라서 하나의 객체는 수백 개의 리터럴 변수가됩니다. 결국 5 개의 Object 변수 대신 실제로 수백 개의 Elementar 변수를 보냅니다.

이 경우 솔루션각 하위 구조 를 문자열 로 직렬화하는 것입니다 . 그런 다음 서버에서 5 개의 문자열 변수로 수신됩니다. 예: {variable1:JSON.stringify(myDataObject1),variable2:JSON.stringify(myDataObject2)...}

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.