Почему _POST иногда пуст, когда текстовая область публикуется в PHP
Вопрос
PHP 4.4 и PHP 5.2.3 под Apache 2.2.4 в Ubuntu.
Я использую Moodle 1.5.3, и недавно у меня возникла проблема при обновлении курса. Переменная $ _POST пуста, но только если в текстовую область в форме было введено много текста. Если вводится только короткий текст, он работает нормально.
Я увеличил post_max_size с 8 до 200 миллионов и увеличил предел памяти до 256 миллионов, но это не помогло. Я удвоил LimitRequestFieldSize и LimitRequestLine до 16380 и установил LimitRequestBody в 0 без улучшения.
Я нашел ответ, но не смог его найти.
Заголовки HTTP в Firefox показывают размер содержимого 3816 с правильными данными, поэтому он просто не достигает $ _POST.
Система работала нормально до нескольких недель назад. Единственное изменение было в / etc / hosts для исправления проблемы HELO с почтовым сервером exim4.
Я могу повторить проблему на машине для разработки, на которой exim4 не работает, поэтому я думаю, что это просто совпадение.
Спасибо за вашу помощь.
Решение
Может быть, это не размер сообщения, а длина строки до новой строки. Если они используют представление Moodle WYSIWYG, HTML-код будет помещен в одну строку без разрывов. Если вы зайдете в html и нажмете return около 1000 символов, это сработает?
Другие советы
Я не знаю достаточно, чтобы действительно дать полезный ответ, поэтому следующее предположение является более образованным (по крайней мере, я на это надеюсь).
Во-первых, вы должны отладить весь запрос, используя access_log или, например, через firebug . (В любом случае, хорошо иметь Firebug.) Для меня ваша проблема звучит как переадресация между ними. Я приведу вам пример:
Предположим, это ваша структура:
/form.php
/directory/index.php
Это ваша форма:
<form action="/directory" method="post">
...
</form>
Проблема в этом случае заключается в том, что, хотя / directory
является допустимым URL-адресом, Apache еще раз перенаправит вас на / directory /
, таким образом, вы потеряете свой полезная нагрузка (что должно быть в $ _ POST
).
Что такое энтип формы? Может быть, это ограничивает количество данных, отправляемых через форму. Р>
Вы также можете проверить входящие необработанные данные $ _POST с помощью:
file_get_contents('php://input');
Чтобы убедиться, что они действительно отправляют данные. Эти предложения можно получить здесь .
Это звучит как проблема интеграции Apache или Apache / PHP. Если $ _POST пусто, это будет означать, что http-сервер не передает информацию POST в PHP. На вашем месте я бы изучил конфигурацию Apache.
Это очевидно, но вы /etc/init.d/apache2 перезапустили?
Кроме того, файл error_log должен содержать некоторую информацию о том, превысил ли размер сообщения установленный лимит. Подумайте над расширением возможностей для устранения проблемы