Отслеживание Процесса загрузки с PHP и JavaScript

оригинал http://www.sitepoint.com/tracking-upload-progress-with-php-and-javascript/

Проблема, которая долгое время умчила веб-разработчиков это отслеживание в реальном времени их приложения, в частности процесса загрузки фалов. Пользователи нетерпеливы; они не хотят сидеть и ждать пока браузер что-то сделает и гадать не зависло ли это или у них медленное соединение. Предоставляя индикатор загрузки  вы предоставляете пользователям информацию и доете им знать что происходит на самом деле.

На первый взгляд, ты можешь предположить что это можно легко реализовать просто получив  размер файла с компьютера пользователя и произвести некоторые простые вычисления над директорией на сервере куда загружается файл. На второй взгляд, ты найдешь вещи, которые не являются такими простыми.

JavaScript может получить имя файла, тип, и даже ширину и высоту локального изображения,  но этого не было до HTML5, который позволяет получить размер файла. К сожалению, HTML5 это еще не завершенный стандарт и он не одинаково поддерживается браузерами. Альтернативным решением является использование Флэша, Java, или ActiveX плагина; нет спасибо, я пас. Еще одно решение это установка расширения Альтернативного PHP кэша, но оно может быть недоступно на хостинге и это слишком дорого для решения такой маленькой задачи.

Все эти решения могут показаться полными неприятностей и задача может быстро перерасти в головную боль. Но по словам Йоды: "Нет ... Тут что-то другое".

По многим причина я люблю PHP за то что он делает кажущиеся сложными задачами простыми. Начиная с PHP 5.4, они сделали это посредством новой конфигурационной директивы session.upload_progress.

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

Сессионный прогресс загрузки

Кроме обычных требований для поддержки загрузки файлов,есть еще два для отслеживания прогресса. session.upload_progress.enabled директива должна быть включена и должно быть скрытое поле в форме с именем, определенным директивой session.upload_progress.name. Когда session.upload_progress.enabled равно true (это значение по умолчанию в PHP 5.4 предположительно после) и $_POST[session.upload_progress.name] отсылается во время загрузки, информация о ходе загрузки становится доступной в суперглобальном массиве $_SESSION.

Вывод массива $_SESSION через print_r() будет выглядеть похоже на следующий во время загрузки фала:

Array
(
    [upload_progress_myForm] => Array
        (
            [start_time] => 1323733740
            [content_length] => 721127769
            [bytes_processed] => 263178326
            [done] => 
            [files] => Array
                (
                    [0] => Array
                        (
                            [field_name] => userfile
                            [name] => ubuntu-10.04.3-desktop-i386.iso
                            [tmp_name] => 
                            [error] => 0
                            [done] => 
                            [start_time] => 1323733740
                            [bytes_processed] => 263178026
                        )
                )
        )
)
Когда ты разрабатываешь либо локально либо на быстром канале и загружаете маленькие файлы, ты не сможешь проследить прогресс загрузки из-за быстрого времени загрузки. В этом случае


















Комментарии

Популярные сообщения из этого блога

kafka конспект однако

Дэвид Рок: Ваш мозг на работе - Разговоры в Гугле