Почему _POST иногда пуст, когда текстовая область публикуется в PHP - PullRequest
5 голосов
/ 23 октября 2008

PHP 4.4 и PHP 5.2.3 под Apache 2.2.4 на Ubuntu.

Я использую Moodle 1.5.3, и недавно у меня возникла проблема при обновлении курса. Переменная $ _POST пуста, но только если в текстовую область в форме было введено много текста. Если вводится только короткий текст, он работает нормально.

Я увеличил post_max_size с 8M до 200M и увеличил memory_limit до 256M, но это не помогло. Я удвоил LimitRequestFieldSize и LimitRequestLine до 16380 и установил LimitRequestBody в 0 без улучшений.

Я гуглил ответ, но не смог его найти.

Заголовки HTTP в Firefox показывают размер содержимого 3816 с правильными данными, поэтому он просто не достигает $ _POST.

Система работала нормально до нескольких недель назад. Единственное изменение было в / etc / hosts для исправления проблемы HELO с почтовым сервером exim4.

Я могу воспроизвести проблему на машине для разработки, на которой exim4 не работает, поэтому я думаю, что это просто совпадение.

Спасибо за вашу помощь.

Ответы [ 5 ]

2 голосов
/ 23 октября 2008

Я не знаю достаточно, чтобы действительно дать полезный ответ, поэтому следующее предположение более хорошо образовано (по крайней мере, я на это надеюсь).

Во-первых, вы должны отладить весь запрос, либо через access_log, либо, например, через firebug . (В любом случае, хорошо иметь Firebug.) Для меня ваша проблема звучит , как будто между ними происходит перенаправление. Я приведу вам пример:

Предположим, это ваша структура:

/form.php
/directory/index.php

Это ваша форма:

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

Проблема в этом случае заключается в том, что, хотя /directory является действительным URL-адресом, Apache еще раз перенаправит вас на /directory/, таким образом вы теряете свою полезную нагрузку (что должно быть в $_POST).

1 голос
/ 23 октября 2008

Может ли это быть не размер сообщения, а длина строки до новой строки. Если они используют представление Moodle WYSIWYG, HTML-код будет помещен в одну строку без разрывов. Если вы зайдете в html и нажмете return каждые 1000 символов, это будет работать?

1 голос
/ 23 октября 2008

Что такое энтип формы? Может быть, это ограничивает количество данных, отправляемых через форму.

Вы также можете проверить входящие необработанные данные $ _POST с помощью:

file_get_contents('php://input');

Чтобы убедиться, что они действительно отправляют данные. Получил эти предложения здесь .

0 голосов
/ 23 октября 2008

Это очевидно, но вы /etc/init.d/apache2 перезапустили?

Кроме того, файл error_log должен содержать некоторую информацию о том, превысил ли размер сообщения установленный лимит. Подумайте об увеличении детализации для устранения проблемы

0 голосов
/ 23 октября 2008

Звучит как проблема интеграции Apache или Apache / PHP. Если $ _POST пусто, это будет означать, что http-сервер не передает информацию POST в PHP. На вашем месте я бы исследовал конфигурацию Apache.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...