![]() |
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]() ![]() ![]() |
|
mstdmstd |
|
||||||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 394 Регистрация: 30.12.2008 Репутация: нет Всего: нет |
Всем привет,
Есть необходимость загрузить картинку в строковом представлении через ajax - запрос. Делаю:
алерт в самой первой строке выводит
И после паузы получаю ошибку 413 Request Entity Too Large... Длина строки это ~ 16 МБ Открываю и смотрю etc/php.ini :
В phpinfo я вижу : PHP Version 5.5.21 ...
Не подскажите в чем проблема и как ее побороть? Файл, который я пытаюсь записать довольно большой, но явно меньше параметров в конфе. Или это ограничения d ajax-запросе ? Гуглом я не нашел есть ли ограничения в размере для ajax-запроса... |
||||||||
|
|||||||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
В гугле на строку `413 Request Entity Too Large` выводит http://ruhighload.com/post/%D0%9E%D1%88%D0...ntity+Too+Large
Не оно? Загружать файлы, вообще говоря, проще и правильнее с помощью объекта formData -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
mstdmstd |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 394 Регистрация: 30.12.2008 Репутация: нет Всего: нет |
formData это пример отсюда ?
http://stackoverflow.com/questions/6974684...uests-in-jquery
FormData - не нужно подключть более никаких библитотек и input.files[0] - это текст моей картинки и 'http://example.com/script.php' - скрипт принимающий файл? |
|||
|
||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
Да, это он.
Единственное ограничение - нужен относительно современный броузер. IE10 минимум... Добавлено через 5 минут и 8 секунд Возможно, вот это пригодится http://stackoverflow.com/questions/4998908...end-to-formdata -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
mstdmstd |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 394 Регистрация: 30.12.2008 Репутация: нет Всего: нет |
Спасибо!
Пообщался с сапортом, там ограничения на post_max_size = 24M, хотя у меня и меньшие файлы выдают ошибку, в независимости что написано в php.ini. И решил переделать загрузку сабмитом формы без аджакса - и вопрос, а есть ли удобные утилиты для загрузки больший файлов наподобе FormData, но при сабмите формы? |
|||
|
||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
По ссылке удалось почитать? 413 ошибку выдает не php, а сервер. Параметры в php.ini не успевают сыграть. Какой сервер-то? nginx - смотреть параметр client_max_body_size 32m -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
mstdmstd |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 394 Регистрация: 30.12.2008 Репутация: нет Всего: нет |
Да ссылку я посмотрел
Саппорт мне ответил:
Упоминания про параметр client_max_body_size в Grid(это такой аналог cPanel) и в phpinfo я не нашел Сапорту я писал про этот параметр но они ответили параметрами выше и видимо эти 24M и есть client_max_body_size? И решил переделать загрузку сабмитом формы без аджакса - и вопрос, а есть ли удобные утилиты для загрузки больший файлов наподобе FormData, но при сабмите формы? Это сообщение отредактировал(а) mstdmstd - 29.3.2016, 12:46 |
|||
|
||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
Саппорт ответил цитатой из php.ini.
http://seyferseed.ru/ru/php/bol-shoj-razme...rosa-v-php.html
-------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
mstdmstd |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 394 Регистрация: 30.12.2008 Репутация: нет Всего: нет |
есть доступ только к php.ini
Доступа к apache.conf - нет И ответьте, пожалуйста, на мой вопрос: И решил переделать загрузку сабмитом формы без аджакса - и вопрос, а есть ли удобные утилиты для загрузки больший файлов наподобе FormData, но при сабмите формы? |
|||
|
||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
mstdmstd, Да, `jquery file upload` в строке гугла. Например этот
-------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
mstdmstd |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 394 Регистрация: 30.12.2008 Репутация: нет Всего: нет |
C Query File Upload - я работал - но не въеду как это поможет с загрузкой больших файлов ?
Разве на этот загрузчик не действуют те же ограничения в максимальном размере post-запроса? |
|||
|
||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
Если нет намерений разбираться с настройками сервера, то остается только уменьшить загружаемый образ. FormData позволит не увеличивать размер POST лишними перекодировками.
Если нет желания разбираться с FormData, то готовый плагин сделает все сам. -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
whatisnot |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 130 Регистрация: 14.12.2014 Репутация: 1 Всего: 2 |
Для современных браузеров это можно сделать используя FileReader. FormData, это не тот объект, который поможет в данном случае. Отправлять в base64, это в три раза больший объем от исходного. |
|||
|
||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
whatisnot, Каким образом FileReader поможет загрузить файл на сервер?
-------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
whatisnot |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 130 Регистрация: 14.12.2014 Репутация: 1 Всего: 2 |
||||
|
||||
mstdmstd |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 394 Регистрация: 30.12.2008 Репутация: нет Всего: нет |
Отправлять в base64, это в три раза больший объем от исходного
Значит мне декадировку надо делать на клиенте и отправлять в сабмит уже перекодированную строку Для этого можно использовать функцию decode64 отсюда http://ntt.cc/2008/01/19/base64-encoder-de...javascript.html Судя по описанию это кроссбаузерное решение... Это уменьшает файл отправки - но не факт что будет достаточно Смотрим FileReader( https://developer.mozilla.org/en/docs/Web/API/FileReader ):
А вот методов для записи я не вижу. Если whatisnot, ничего не напутал, то, плиз, ткните, что за методы? Это сообщение отредактировал(а) ksnk - 31.3.2016, 18:39 |
|||
|
||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
Откуда взялась такая строка? Может чуть ранее по коду есть более удобный вид?
Можно строку преобразовать в объект blob, который вполне успешно притворяется файлом. Пример, правда, с formData, но и FileReader должен такое открывать. -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
whatisnot |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 130 Регистрация: 14.12.2014 Репутация: 1 Всего: 2 |
Методов для этого придется использовать много и не только FileReader. Ну напрягите гугл, об этом (загрузка файлов на сервер частями) написано так много, вот с лету первое попавшееся -HTML5, загрузка файлов, что переписывать уже описанное... Есть на Хабре статьи по этому поводу, и решений не одно. Вы родите что либо свое из познанного, а уже о своих ошибках, если будут допущены, спрашивайте. |
|||
|
||||
mstdmstd |
|
||||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 394 Регистрация: 30.12.2008 Репутация: нет Всего: нет |
Спасибо, буду пробовать
Пока что я хочу 64-битной строку декодировать на клиенте и отправить сабмитом формы Возможно уменьшив данные в сабмит и не будет ошибки из-за большого обьема данных... Делаю
Форма сабмититься и файл записывается на диск функцией file_put_contents без перекодировки и изменений но при попытке прочитать его получаю
И открыв этот файл в текстовом редакторе я вижу http://i.imgur.com/luLBkhj.png Сравнивая этот файл с другими png-файлами в текстовом редакторе вижу что они не похожи Функция decode64 взята отсюда http://ntt.cc/2008/01/19/base64-encoder-de...javascript.html Я пробовал использовать atob вместо decode64 и тот же результат Изначально я отправлял 64-данные и на сервере делал перекодировку перед записью в файл:
Это сообщение отредактировал(а) mstdmstd - 1.4.2016, 09:08 |
||||||
|
|||||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
mstdmstd, Я понимаю, конечно, желание обойтись малой кровью, но FormData был придуман совсем не от того, что кому то не хотелось использовать стандартную форму. Причина в том, что стандартной формой можно сделать далеко не все. В частности, послать файл довольно сложно. А в "обычном" для формы виде - практически невозможно.
Можно посмотреть на мои ссылки и попытаться воспользоваться этим объектом. Потом, когда размер загружаемого файла опять упрётся в нежелание разбираться с настройками сервера, можно почитать про FileReader, поискать примеры его использования для загрузки файлов по кусочкам. Если нужен результат, а не личный опыт - проще и разумнее воспользоваться плагином. -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
mstdmstd |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 394 Регистрация: 30.12.2008 Репутация: нет Всего: нет |
Спасибо за подсказки!
Сделал с небольшими изменениями как описано здесь https://habrahabr.ru/company/Techart/blog/100189/. Как я понимаю, решение кроссбраузерно, пока у браузера клиента хватит памяти... Локально и на сервре работает, хотя судя по кометариям во многих случаях этого недостаточно... |
|||
|
||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
Нужно понимать, что пока клиент не загрузит все данные, его броузер(страница) будет заблокирован. Можно посмотреть на комментарии по ссылке на хабре
Ну и тот факт, что статья написана 6 лет назад говорит о том, что плагины могли бы оказаться уже написаными. https://habrahabr.ru/post/154097/ - более новая статья, с примерами работы с FileReader и FormData -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "PHP" | |
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |