2010-03-02 58 views
218

Xin lỗi nếu điều này là trùng lặp, tôi sẽ nghĩ rằng nó sẽ được nhưng không thể tìm thấy bất cứ điều gì.Giới hạn kích thước của yêu cầu đăng là gì?

Tôi có một ứng dụng flex mà tôi đang đăng dữ liệu trở lại máy chủ php/mysql qua IE. Tôi chưa gặp bất kỳ vấn đề nào, nhưng biết điều này trước thời hạn có thể giúp tôi tiết kiệm rất nhiều công sức và thất vọng. Có giới hạn kích thước để đăng dữ liệu qua http không?

Bài viết này nói không: http://www.netlobo.com/ie_form_submit.html

thảo luận này nói yes: http://bytes.com/topic/php/answers/538226-what-maximum-limit-using-post-method

Và nó mọi việc suôn sẻ lại những gì tôi có thể tìm thấy trực tuyến. Vì vậy, vui lòng giới hạn câu trả lời cho các số được kiểm tra/xác minh cá nhân.

Tôi muốn đăng lại chuỗi XML có thể khá lớn (có thể lên đến 5mb).

Nếu có sự khác biệt: trình duyệt sẽ luôn là IE (sản phẩm của chúng tôi yêu cầu), bài đăng đến từ và httpService trong flex, máy chủ web là php, DB là mySql.

+5

http://stackoverflow.com/questions/2276759/php-whats-the-total-length-of-a-post-global-variable – karim79

+0

Cảm ơn karim, tôi đoán tôi không có quyền tìm kiếm của mình làm điều đó để đi lên. – invertedSpear

Trả lời

174

Tùy thuộc vào cấu hình máy chủ. Nếu bạn đang làm việc với PHP trong Linux hoặc tương tự, bạn có thể kiểm soát nó bằng cách sử tập tin cấu hình .htaccess, như vậy:

#set max post size 
php_value post_max_size 20M 

Và, vâng, tôi có thể làm chứng cho sự thật rằng công trình này :)

Nếu bạn đang sử dụng IIS, tôi không biết bạn sẽ đặt giá trị cụ thể này như thế nào.

+3

Cài đặt 'post_max_size' này ở đâu? Tôi khá mới để php và tôi không thể tìm thấy nó bất cứ nơi nào trong cơ sở mã của chúng tôi (sử dụng dreamWeaver tìm tất cả các quá trình). Tôi muốn hỏi quản trị viên của chúng tôi nhưng họ có ý nghĩa. :-P – invertedSpear

+1

@invertedSpear Nó nằm trong tệp cấu hình PHP của máy chủ web của bạn, ví dụ: trên máy chủ Linux của chúng tôi là /etc/php5/cgi/php.ini – Alan

+8

Bạn có thể đặt giá trị này thành kích thước bất kỳ không? Không có bất kỳ loại hạn chế giao thức nào? Bạn có thể đặt nó thành 999999999999999999999M không? – Para

1

Máy chủ http có thể quyết định xem có giới hạn hay không. Sản phẩm tôi làm việc trên cho phép quản trị viên định cấu hình giới hạn.

+0

Ngoài ra, trong tập tin PNP.INI có một thiết lập: max_input_vars mà trong phiên bản của tôi về PHP: 5.4.16 mặc định là 1000. Từ hướng dẫn: "Có bao nhiêu biến đầu vào có thể được chấp nhận (giới hạn áp dụng cho $ _GET, $ _POST và $ _COOKIE superglobal riêng biệt) " Ref .: [http://www.php.net/manual/en/info.configuration.php#ini.max-input-vars][1 ] [1]: http://www.php.net/manual/en/info.configuration.php#ini.max-input-vars –

64

Phần url của yêu cầu (GET và POST) có thể bị giới hạn bởi cả trình duyệt và máy chủ - thường là kích thước an toàn là 2KB vì hầu như không có trình duyệt hoặc máy chủ nào sử dụng giới hạn nhỏ hơn.

Nội dung yêu cầu (POST) thường bị giới hạn bởi máy chủ trên cơ sở kích thước byte để ngăn chặn loại tấn công DoS (lưu ý rằng việc thoát ký tự có thể làm tăng kích thước byte của phần thân). Cài đặt máy chủ phổ biến nhất là 10MB, mặc dù tất cả các máy chủ phổ biến đều cho phép tăng hoặc giảm thông qua tệp hoặc bảng điều khiển cài đặt.

* Một số ngoại lệ tồn tại với điện thoại di động cũ hoặc các trình duyệt thiết bị nhỏ khác - trong những trường hợp đó, nó là chức năng của không gian lưu trữ dành cho mục đích này trên thiết bị.

+2

Giới thiệu về giới hạn trình duyệt, xem xét 'curl' –

+5

Tôi biết Tôi là một chút đằng sau những lần ở đây nhưng câu trả lời như thế này là ason Tôi yêu StackOverflow. Trên và vượt ra ngoài những gì cần thiết và cung cấp một số thông tin cơ bản có giá trị. – Dormouse

5

Như David đã chỉ ra, tôi sẽ đi với KB trong hầu hết các trường hợp.

php_value post_max_size 2KB 

Lưu ý: biểu mẫu của tôi rất đơn giản, chỉ một vài hộp văn bản, không phải văn bản dài.

34

Ngoài ra, trong file PHP.INI có một thiết lập:

max_input_vars 

mà trong phiên bản của tôi về PHP: 5.4.16 mặc định là 1000.

Từ hướng dẫn: "Có bao nhiêu biến đầu vào có thể được chấp nhận (giới hạn được áp dụng cho $ _GET, $ _POST và $ _COOKIE superglobal riêng)"

Ref .: http://www.php.net/manual/en/info.configuration.php#ini.max-input-vars

-1

Một trong những sản phẩm tốt nhất giải pháp cho việc này, bạn không sử dụng nhiều hoặc nhiều hơn 1.000 trường nhập. Bạn có thể nối nhiều đầu vào với bất kỳ ký tự đặc biệt nào, cho ví dụ. @.

Xem này:

<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'> 

Sử dụng bất kỳ kịch bản (JavaScript hay 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 

Với điều này, bạn sẽ bỏ qua các vấn đề max_input_vars. Nếu bạn tăng max_input_vars trong tệp php.ini, điều đó có hại cho máy chủ vì nó sử dụng bộ nhớ cache của máy chủ nhiều hơn và đôi khi điều này có thể làm hỏng máy chủ.

+1

Tôi không thấy các biến ghép nối lưu bộ nhớ như thế nào. Mỗi ký tự ASCII sử dụng 1 byte bộ nhớ. Một chuỗi (về mặt kỹ thuật là mảng char nếu tôi không nhầm) sử dụng n * 1 byte với n là độ dài chuỗi. Tại sao thêm một nhân vật khác làm giảm bộ nhớ được sử dụng? Trong phép tính này, bạn sẽ thêm một byte khác cho mỗi '@' bạn thêm vào chuỗi. Tất nhiên bạn giảm số lượng biến được sử dụng nhưng bạn trả tiền này "giành chiến thắng" với công việc thêm tách chúng lên một lần nữa. – DBX12

+1

@ DBX12 Trong khi bạn không lưu bộ nhớ với thủ thuật này, bạn có thể bỏ qua tùy chọn 'max_input_vars' trong' php.ini' với điều này. Không chính xác, những gì được hỏi, nhưng vẫn hữu ích. – RicoBrassers

9

Bạn có thể đăng lượng lớn dữ liệu bằng cách đặt biến php.ini: max_input_vars Kích thước mặc định của biến này là 1000 nhưng nếu bạn muốn gửi lượng lớn dữ liệu, bạn phải tăng kích thước cho phù hợp. Nếu bạn không thể đặt kích thước từ ini_set, bạn phải thực hiện thông qua htaccess hoặc bằng cách thực hiện thay đổi trực tiếp vào tệp php.ini.

max_input_vars 2500 
memory_limit 256M 
1

Theo mặc định, yêu cầu bài đăng có kích thước tối đa 8mb. Nhưng bạn có thể sửa đổi nó theo yêu cầu của bạn. Việc sửa đổi có thể được thực hiện bằng cách mở tập tin php.ini (cài đặt cấu hình php).

Tìm

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

thay thế 8 theo yêu cầu của bạn.

Các vấn đề liên quan