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 без каких-либо улучшений.
Я искал ответ в Google, но не смог его найти.
Заголовки HTTP в firefox показывают размер содержимого 3816 с правильными данными, поэтому он просто не попадает в $ _POST.
Система работала нормально до нескольких недель назад. Единственное изменение было в / etc / hosts, чтобы исправить проблему HELO с почтовым сервером exim4.
Я могу воспроизвести проблему на машине разработки, на которой не запущен exim4, поэтому я думаю, что это просто совпадение.
Спасибо за вашу помощь.
Вы сказали, что с небольшими объемами текста проблем нет: смогли ли вы найти приблизительный предел?
Это может быть очевидно, но вы проверили, действительно ли форма использует POST, а не GET?
Нет, точный порог может быть разным, но 2702 символа, кажется, приводят к сбою, иногда меньше.
Хммм ... Я определенно думаю, что вам нужно продолжить работу по выявлению проблемы. Тот факт, что это переменная, говорит о том, что вы не столкнулись с каким-то фиксированным пределом, и, вероятно, вы столкнулись с ошибкой, возможно, связанной с управлением памятью. Есть странные персонажи? Что-нибудь нестандартное в форме?
Текст включает теги HTML. В форме есть несколько javascript и скрытых полей.






Похоже на проблему интеграции Apache или Apache / PHP. Если $ _POST пуст, это будет означать, что http-сервер не передает информацию POST в PHP. На вашем месте я бы исследовал конфигурацию Apache.
HTTP Live Headers (расширение firefox) правильно отображает содержимое POST.
Это очевидно, но вы перезагружали /etc/init.d/apache2?
Также файл error_log должен показывать некоторую информацию о том, превысил ли размер сообщения установленный лимит. Постарайтесь повысить уровень детализации для устранения проблемы.
Что такое энктип формы? Возможно, это ограничивает количество данных, отправляемых через форму.
Вы также можете проверить входящие необработанные данные $ _POST с помощью:
file_get_contents('php://input');
Чтобы убедиться, что это действительно отправка данных. Получил эти предложения здесь.
Я не знаю достаточно, чтобы дать действительно полезный ответ, поэтому нижеследующее является более обоснованным предположением (по крайней мере, я на это надеюсь).
Во-первых, вы должны отладить весь запрос либо через access_log, либо, например, через Firebug. (В любом случае хорошо иметь Firebug.) Для меня ваша проблема звуки как перенаправление происходит между ними. Приведу пример:
Предположим, это ваша структура:
/form.php
/directory/index.php
Это ваша форма:
<form action = "/directory" method = "post">
...
</form>
Проблема в этом случае заключается в том, что, несмотря на то, что /directory является действительным URL-адресом, Apache перенаправит вас еще раз на /directory/, таким образом, вы потеряете свои полезные данные (что должно быть в $_POST).
Может быть, дело не в размере сообщения, а в длине строки до новой строки. Если они будут использовать вид Moodle WYSIWYG, HTML просто будет помещен в одну строку без разрывов. Если вы войдете в html и нажмете return примерно через каждые 1000 символов, это сработает?
Странно. Вы определили точный порог? Подробности могут быть полезны тем, кто хочет воспроизвести проблему.