2008-10-23 37 views
5

PHP 4.4 và PHP 5.2.3 theo Apache 2.2.4 trên ubuntu.Tại sao _POST đôi khi trống khi văn bản được đăng trong PHP

Tôi đang chạy Moodle 1.5.3 và gần đây đã gặp sự cố khi cập nhật khóa học. Biến $ _POST trống nhưng chỉ khi có nhiều văn bản được nhập vào vùng văn bản trên biểu mẫu. Nếu chỉ có một văn bản ngắn được nhập vào nó hoạt động tốt.

Tôi đã tăng post_max_size từ 8M lên 200M và tăng memory_limit lên 256M nhưng điều này không có tác dụng. Tôi đã tăng gấp đôi LimitRequestFieldSize và LimitRequestLine thành 16380 và đặt LimitRequestBody thành 0 mà không cần cải thiện.

Tôi đã googled cho câu trả lời nhưng không thể tìm thấy câu trả lời.

Tiêu đề HTTP trên firefox hiển thị kích thước nội dung 3816 với dữ liệu chính xác, vì vậy chỉ không nhận được $ _POST.

Hệ thống đã hoạt động tốt cho đến vài tuần trước. Thay đổi duy nhất là/etc/hosts để sửa vấn đề HELO với máy chủ email exim4.

Tôi có thể sao chép sự cố trên máy phát triển có exim4 không chạy nên tôi nghĩ đó chỉ là sự trùng hợp ngẫu nhiên.

Cảm ơn sự hỗ trợ của bạn.

+0

Kỳ lạ. Bạn đã xác định ngưỡng chính xác chưa? Chi tiết có thể hữu ích cho những người muốn tái tạo sự cố. –

+0

bạn đã nói không có vấn đề gì với một lượng nhỏ văn bản: bạn có thể tìm thấy giới hạn gần đúng không? – nickf

+0

Điều này có thể hiển nhiên, nhưng bạn đã kiểm tra xem biểu mẫu có thực sự sử dụng POST và không GET không? – troelskn

Trả lời

1

Nó có thể không phải là kích thước có liên quan của bài đăng, nhưng bao lâu dòng đó trước một dòng mới. Nếu họ sử dụng chế độ xem Moodle WYSIWYG thì html sẽ được đưa vào một dòng mà không bị ngắt. Nếu bạn đi vào html và nhấn trở lại xung quanh mỗi 1000 ký tự nó hoạt động?

0

Dường như vấn đề tích hợp Apache hoặc Apache/PHP. Nếu $ _POST rỗng, nó sẽ gợi ý rằng máy chủ http không cung cấp thông tin POST cho PHP. Nếu tôi là bạn, tôi sẽ điều tra cấu hình Apache.

+0

Tiêu đề HTTP Trực tiếp (tiện ích mở rộng firefox) hiển thị nội dung POST chính xác. – Puzzled

0

Điều này hiển nhiên, nhưng bạn đã /etc/init.d/apache2 khởi động lại chưa?

Ngoài ra, tệp error_log sẽ hiển thị một số thông tin về việc liệu kích thước bài đăng có vượt quá giới hạn đã đặt hay không. Xem xét tăng mức độ chi tiết của bạn để gỡ rối sự cố

1

Mã hóa của biểu mẫu là gì? Có thể là nó giới hạn số lượng dữ liệu gửi qua biểu mẫu.

Bạn cũng có thể muốn kiểm tra liệu dữ liệu đến $ _POST với:

file_get_contents('php://input'); 

Để đảm bảo họ thực sự dữ liệu gửi là. Nhận các đề xuất này here.

+0

cũng trống – Puzzled

2

Tôi không biết đủ để thực sự cung cấp một câu trả lời hữu ích vì vậy sau đây là một dự đoán được giáo dục tốt hơn (ít nhất là tôi hy vọng như vậy).

Trước tiên, bạn nên gỡ lỗi toàn bộ yêu cầu, theo access_log hoặc ví dụ thông qua firebug. (Tốt để có Firebug anyway.) Đối với tôi vấn đề của bạn âm thanh như một chuyển hướng xảy ra ở giữa.Tôi cung cấp cho bạn một ví dụ:

Giả sử đây là cấu trúc của bạn:

/form.php 
/directory/index.php 

Đây là hình của bạn:

<form action="/directory" method="post"> 
... 
</form> 

vấn đề trong trường hợp này là, mặc dù /directory là url hợp lệ, Apache sẽ chuyển hướng bạn một lần nữa đến /directory/, do đó bạn đang mất tải trọng của bạn (những gì được cho là trong $_POST).

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