@targetologru

При отправке объемного POST получаем 404 ошибку, почему?

Здравствуйте! У меня на сайте есть визивиг-редактор.

Когда я вставляю туда картинку с компьютера, то редактор создаёт тег img, а в качестве src прописывает содержимое картинки, закодированное в base64. То есть если даже вставить картинку 2х2 пикселя, то количество символов, которое генерирует визивиг-редактор больше сотни.

Проблема в том, что если попытаться вставить большую картинку, которая весит 1.5 мегабайта, и отправить форму, то происходит редирект на 404 ошибку. Потому что в данном случае, количество символов будет почти 2 миллиона. И эти два миллиона я пытаюсь передать в POST.

Еррор лог пустой. После отправки формы пытаюсь вывести все данные просто через print_r($_POST), и даже в таком случае происходит редирект на 404 при большой картинке, а с маленькой все норм.

Есть ли какие-то ограничения на длину строки в POST? Или есть ли какое-то решение на стороне клиента, чтобы перед отправкой формы, картинки сжимались как-то или перерисовывались в меньшее разрешение, например, с помощью JS?

UPD: Добавил исходный код.
<form method="POST" action="/cabinet/new/" id="new_case" autocomplete="off" enctype="multipart/form-data">
	<textarea id="summernote" name="new_case_body"></textarea>
	<input type="submit" name="new_case" id="fs" value="Сохранить">
</form>


И обработчик:
if (isset($_POST['new_case'])) {
	print_r($_POST);exit;
}


Следует отметить, что на сервере есть ЧПУ.
То есть в action формы у меня указано /cabinet/new/, а по факту сервер отправляет на /index.php?r=/cabinet/new/ и уже дальше через require я подгружаю нужный модуль, например, cabinet_new.php
Работает так:
RewriteEngine On

RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [QSA,R=301,L] 

RewriteCond %{HTTP_HOST} ^www\.(.*)$
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-d  
RewriteCond %{REQUEST_FILENAME} !-f     
RewriteCond %{REQUEST_URI} /+[^\.]+$
RewriteRule ^(.+[^/])$ %{REQUEST_URI}/ [R=301,L]
RewriteRule \.(php|html|swf|fla|xml|ico|jpg|gif|png|txt|js|css|eot|ttf|woff|map)$ - [L]
RewriteRule ^(.*)$ index.php?r=$1 [L,QSA]


Настройки такие:
memory_limit = 128M
post_max_size = 32M
upload_max_filesize = 2M


UPD2
Провёл тест. Вставляю в текстовое поле 1 000 000 символов (почти 1МБ), всё работает нормально.
Вставляю чуть больше — 1 100 000, отправляю форму — редирект на 404
Значит, где-то есть ограничение на длину POST свыше 1МБ.
Техподдержка говорит, что никаких ограничений нет.
Увеличил upload_max_filesize до 16М, всё равно 404
  • Вопрос задан
  • 161 просмотр
Пригласить эксперта
Ответы на вопрос 1
Maksclub
@Maksclub Куратор тега PHP
maksfedorov.ru
post_max_size
php.net/manual/ru/ini.core.php#ini.post-max-size

Также есть ещё max_upload_filesize
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы