Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Непонятка с загрузкой файла на сервер через форму.
Форумы портала PHP.SU » » Работа с файловой системой и файлами » Непонятка с загрузкой файла на сервер через форму.

Страниц (1): [1]
 

1. mishansaloma - 29 Марта, 2015 - 19:08:05 - перейти к сообщению
Всем здравия. Думал потяну сам, но пока что есть только идеи, но сейчас напишу поподробнее.
Классическая ситуация с загрузкой файла на сервер формой. Файл грузится в темповую папку, потом в скрипте обрабатывается, и затем перемещается по назначению.
Все работает нормально, пока не появляется слабый канал интернета, а файл наоборот немаленький (например 10мб). И тут интересная ситуация:
1. Пользователь заполняет форму и нажимает кнопку - отправить.
2. Проходит энное время и страница с формой перезагружается, на исходное состояние, т.е. пользователь не видит результат загрузки. Но! Обработка файла на сервере продолжается. 3. Пользователь заново заполняет форму и снова отправляет файл. Он нормально загружается и тут пользователь видит, что файлов в результате загружено 2 и первая загрузка закончилась таки правильно.

Вопрос в том как такое могло произойти? Случается очень редко (1 из 1000) и только когда есть проблемы с интернетом.
Я предполагал, что не хватает времени на выполнение скриптов, но в результате то все нормально отрабатывается.

А теперь немного подробностей:
1. Форма передает управление на назначенный ей скрипт обработчик. По идее скрипт запускается только после загрузки файла (Вот тут вопрос - а есть ли тайаут на ожидание загрузки?)
2. Скрипт проверяет файл на допустимость (тут все быстро).
Затем скрипт делает небольшую обработку файла (например создание аватарки из картинки) - может затягиваться до 20 сек, т.к. обработать анимированный гиф размером в 5мб дело не быстрое (сделать аватарку тоже анимированный гиф), делаю Имеджиком.
Затем если все условия проверок и аватарка в порядке то все заливается на облачное хранилище.
В самом конце, если заливка пошла хорошо - в базе прописываются ссылки на файлы в облаке.
После отработки скрипта временный файл с сервера удаляется автоматически.
3. На выходе из скрипта пользователь направляется на форму - "Файл загружен"

Вроде я правильно понимаю как работает логика загрузки. Но непонятно, почему иногда пользователь не видит п.3.

Как выход - сделать загрузку файла на сервер предзагрузчиком (типа как в гмайле файлы добавляются к письму) и заблокировать до полной загрузки кнопку "отправить", тогда пользователь будет видеть как его файл загружается и не будет паниковать. Но на такой вариант немного нету времени, т.к. логика загрузки довольно сложная, а тут придется перебросить предзагруженный файл в отдельную папку, чтобы он автоматически не был стерт, следить за ним и если пользователь передумал - то самому стирать и т.д.

Возможно можно просто правильно настроить таймауты на загрузку файла. Хотя опять таки повторюсь - если он загружается всегда правильно и до конца, то дело не в таймаутах. Значит что-то (может быть даже сам браузер) не дожидается окончания загрузки и отработки и принимает решение перезагрузить страницу.

Очень надеюсь на помощь.
Если написал путанно, то напишите, что именно пояснить и распишу поподронее.

 

Powered by ExBB FM 1.0 RC1