Почему _POST иногда пуст, когда текстовая область публикуется в PHP

StackOverflow https://stackoverflow.com/questions/229269

  •  04-07-2019
  •  | 
  •  

Вопрос

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 должен содержать некоторую информацию о том, превысил ли размер сообщения установленный лимит. Подумайте над расширением возможностей для устранения проблемы

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top