#html #forms
#HTML #формы
Вопрос:
В моем приложении есть форма, в которую технические специалисты вводят информацию о различных событиях или предпринятых действиях (например, обновлении сервера). Проблема в том, что эти входные данные могут быть довольно длинными, а затем моя форма перестает работать. Сервер возвращает браузеру ошибку 302, если браузеры пытаются отправить данные, но так же часто браузер ничего не делает, когда я пытаюсь отправить. Когда браузер ничего не делает, быстрый просмотр в инструментах разработчика Chrome показывает, что браузер пытается выполнить post по правильному пути, но статус указан как сбой. Это всегда происходит, если текстовое поле содержит более ~ 3500 символов. Я попытался изменить enctype, чтобы посмотреть, что произойдет, но это не решило проблему.
<form enctype="application/x-www-form-urlencoded" action="/some/path/" method="post" _lpchecked="1">
<fieldset>
<input type="hidden" name="machineId" value="some_integer">
<input type="hidden" name="eventId" value="some_integer">
Titel:
<select name="form[title]">
<option>Some_option</option>
<option>some_option</option>
</select>
<textarea name="form[text]" rows="25" cols="90"></textarea>
<input type="submit" value="Spara" title="Spara">
</fieldset>
</form>
Есть идеи о том, почему это не работает и что можно сделать?
РЕДАКТИРОВАТЬ: мое приложение основано на PHP и работает на Debian / Apache. Я не смог найти никаких настроек, которые могли бы помешать корректной работе post. У меня есть значение post_max_size, равное 8 МБ, но размер текста из 3500 символов не превышает 8 МБ…
Комментарии:
1. Случайно, на вашем сервере установлен максимальный размер post? Может быть превышен максимальный порог post-сайта, что приводит к его отказу. (Кроме того, попробуйте использовать
multipart/form-data
в качестве формыenctype
и посмотреть, есть ли какие-либо изменения (application/x-www-form-urlencoded
значение по умолчаниюenctype
)2. Я не смог найти на своем сервере никаких настроек, которые могли бы иметь такой эффект, но если вы можете дать мне подсказку о том, что искать, я проверю еще раз. Я использую Debian / Apache. Я также пробовал несколько разных типов, но все они дают одинаковый результат
Ответ №1:
Ваш текст через POST
, скорее всего, НЕ будет 1 байт / символ. Apache mod_security может фильтровать данные. И это может быть любое другое количество модов Apache, которые влияют на шифрование post. Вы можете проверить mb_get_info() и другие функции mb_ *, чтобы проверить, как PHP кодирует текст. Если вы не хотите копать слишком глубоко, вы можете сделать обоснованное предположение из пары точек данных о том, сколько байтов на символ используется в вашем сообщении, и настроить post_max_size
его в соответствии с вашими потребностями.
Если вы не можете выводить ошибки на экран, вы можете проверить
tail -n 30 /var/log/apache2/error.log #prints last 30 lines of error.log
сразу после появления симптома белого экрана, чтобы получить более подробную информацию об ошибках / предупреждениях / etc, возникающих во время выполнения скрипта.
Также обратите внимание, что post_max_size
это ограничено memory_limit
… Я не думаю, что это проблема, но это может быть что-то, что следует учитывать другому читателю.
Комментарии:
1. В журнале apache я обнаружил, что это «ошибка сегментации». На самом деле это не решает мою проблему, поскольку их сложно отследить, но вы дали мне ответ, так что спасибо вам.
Ответ №2:
какой язык на стороне сервера вы используете? возможно, вам нужно некоторое сжатие текста, подобное этому алгоритму Хаффмана
Комментарии:
1. Извините, полностью пропустил эту информацию. Я использую PHP 5.2.6