Похоже, ваш php был скомпилирован с Suhosin . ограничение по умолчанию длины для любой почтовой переменной с Suhosin составляет 65000 байт, что довольно близко к тому, что вы оцениваете как ваш предел.
Фактически, ваш сервер отправляет X-Powered-By
заголовок со значением PHP/5.2.6-1+lenny9
.Я погуглил эту версию пакета, и на сайте Debian они упоминают, что она была построена с Suhosin .
Поскольку у вас нет контроля над конфигурацией вашего сервера, решение будет разделить холстДанные в несколько переменных ниже предела длины сообщения вашего сервера, а затем собрать в PHP.Если вы проверите свой phpinfo()
, он должен показать все эти ограничения.
Редактировать - Добавлен пример кода
Javascript:
var canvasData = canvasP.toDataURL();
var length = canvasData.length;
var content = '';
var index = 0;
var limit = 64999;
var l;
while (length > 0) {
if (length <= limit)
l = length;
else
l = limit;
content += '&content[]=' + canvasData.substr(index * limit, l);
length -= l;
index++;
}
xhr.send(content);
Не думаю, что вам нужен encodeURIComponent()
, который у вас есть, потому что toDataURL()
кодируется как base64, что безопасно для URL.
PHP:
if (!empty($_POST['content']) && is_array($_POST['content']))
{
$content = '';
foreach ($_POST['content'] as $part)
{
$content .= $part;
}
$content = base64_decode($content);
}
Не самый эффективный способ сделать это, но он может помочь вам.
У него все еще будут свои ограничения с Suhosin, но вы сможете отправлять намного больше данных таким способом.Похоже, вы будете ограничены 64 частями из 65000 байтов в массиве, прежде чем вам также придется использовать несколько массивов.Однако в этот момент он уже становится слишком большим для того, чтобы большинство людей часто загружали его, и, вероятно, было бы лучше как-то отправить изменения в изображение вместо всего изображения.