Отслеживание Процесса загрузки с 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 через print_r() будет выглядеть похоже на следующий во время загрузки фала:
Проблема, которая долгое время умчила веб-разработчиков это отслеживание в реальном времени их приложения, в частности процесса загрузки фалов. Пользователи нетерпеливы; они не хотят сидеть и ждать пока браузер что-то сделает и гадать не зависло ли это или у них медленное соединение. Предоставляя индикатор загрузки вы предоставляете пользователям информацию и доете им знать что происходит на самом деле.
На первый взгляд, ты можешь предположить что это можно легко реализовать просто получив размер файла с компьютера пользователя и произвести некоторые простые вычисления над директорией на сервере куда загружается файл. На второй взгляд, ты найдешь вещи, которые не являются такими простыми.
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 ) ) ) )Когда ты разрабатываешь либо локально либо на быстром канале и загружаете маленькие файлы, ты не сможешь проследить прогресс загрузки из-за быстрого времени загрузки. В этом случае
Комментарии
Отправить комментарий