2011-10-11 45 views
39

Tôi đang truy cập máy chủ PHP bằng REST: tất cả dữ liệu được chuyển trong yêu cầu GET làm tham số URL. Một trong các tham số đến máy chủ trong query_string, nhưng nó không nằm trong toàn bộ _GET. Nhưng rút ngắn các tham số (các cutoff có vẻ là khoảng 512 ký tự) cho phép nó thông qua.Tham số URL tối đa trong _GET

Giả sử tôi đã chẩn đoán vấn đề chính xác, có cách nào để thay đổi kích thước tối đa này không? Tôi đã không tìm thấy bất kỳ lời giải thích nào trong tài liệu, thậm chí không đề cập đến giới hạn này. Đây là trên Debian squeeze/Apache 2.2.16/PHP 5.3.3.

+0

Thời lượng tối đa cho yêu cầu GET thường là khoảng 2k. –

+1

Cảm ơn, nhưng những gì tôi cần biết là độ dài tối đa của một tham số GET cá nhân trong PHP. – alexfernandez

Trả lời

65

Ok, có vẻ như một số phiên bản của PHP có một giới hạn độ dài của params GET:

Xin lưu ý rằng các thiết lập PHP với các bản vá Suhosin cài đặt sẽ có một giới hạn mặc định là 512 ký tự cho các thông số get . Mặc dù xấu thực tế, hầu hết các trình duyệt (bao gồm cả IE) hỗ trợ URL lên đến khoảng năm 2000 ký tự, trong khi Apache có một mặc định của 8000.

Để hỗ trợ thêm cho các thông số dài với Suhosin, thêm suhosin.get.max_value_length = <limit> trong php.ini

Nguồn: http://www.php.net/manual/en/reserved.variables.get.php#101469

+1

Nó hoạt động, cảm ơn! – alexfernandez

+1

oooch, đã bị ảnh hưởng bởi điều này trên một số dữ liệu quan trọng! Cảm ơn, điều này đã khắc phục được sự cố của tôi. – artfulrobot

+0

Tôi có thể ôm bạn. Tham số truy vấn 800+ char '' crypt'' được trả về từ Sage Pay bằng cách sử dụng tích hợp Form đơn giản không được xử lý checkout_process của chúng tôi, dẫn đến trình bày thông điệp khá không hữu ích "Thẻ không thể được ủy quyền!". FYI Tôi đã tìm thêm '' php_value suhosin.get.max_value_length 2000'' vào .htaccess không hoạt động, tôi phải thêm '' suhosin.get.max_value_length = 2000'' vào phần '' [suhosin] '' của php. ini (và khởi động lại httpd) để thực hiện thay đổi có hiệu lực. Đột nhiên, thông số truy vấn mã hóa dài của tôi được nhận, xử lý và thanh toán bằng thẻ hoạt động trở lại. – Neek

0

Xem What is the maximum length of a URL in different browsers?

Chiều dài của url không thể thay đổi trong PHP. Câu hỏi được liên kết là về giới hạn kích thước URL, bạn sẽ tìm thấy những gì bạn muốn.

+0

URL là tốt và chuỗi truy vấn có mọi thứ. Nó chỉ là một tham số này (dài hơn 512 ký tự) mà không hiển thị trong _GET. – alexfernandez

+0

@alexinblue Có lẽ giá trị của biến này có một số ký hiệu đặc biệt. Bạn có sử dụng 'urlencode()' cho giá trị không? – Karolis

+0

@Geoffroy như đã nêu, tôi đang sử dụng REST: một yêu cầu GET khá thuận tiện và tôi không sẵn sàng thay đổi nó. Bài báo liên kết nói về giới hạn thực tế khoảng 2000 - 4000 ký tự trong IE8; các trình duyệt cũ không phải là vấn đề. – alexfernandez

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