Вопрос

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

У меня есть одна идея, но не уверен, сработает ли она:загрузите обычный файл, но вместо этого отправьте в iframe.Когда это будет отправлено, сохраните информацию о файле (размер и временное местоположение) в сеансе.В то же время запускайте вызов AJAX, скажем, каждые 10 секунд, чтобы проверить размер файла по сравнению с размером, сохраненным в сеансе.Это вернет размер AJAX, а затем индикатор выполнения будет увеличен и, возможно, отобразит загруженный размер пользователю.

Мысли?

Это было полезно?

Решение

Ты можешь попробовать ЮИ или Прототип или jQuery

Другие советы

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

Для этого существуют обходные пути:При включении APC вы сможете получить доступ к этой информации, если включите поле с именем "APC_UPLOAD_PROGRESS" и используете apc_fetch() для извлечения записи кэша со статусом.

Существует также плагин под названием uploadprogress, но он не очень хорошо документирован и не работает в Windows (во всяком случае, последний раз я проверял).

Альтернативой является использование Flash для этого.Смотрите сценарии, подобные Модная загрузка.

До появления APC мне пришлось написать CGI-скрипт на C, который записывал информацию в текстовый файл.Однако сейчас APC кажется гораздо лучшим способом сделать это.

Надеюсь, это поможет.

Пока что наиболее распространенным способом сделать это является SWFUpload: http://www.swfupload.org/

Тем не менее, это является возможно с чистым PHP, просто очень сложным и очень экспериментальным.Я посмотрю, смогу ли я найти ссылку.

Редактировать:Согласно комментариям к php.net, начиная с версии 5.2, есть хук для обработки хода загрузки. http://us.php.net/features.file-upload#71564

Дополнительные объяснения:

Пример Расмуса:

Начиная с PHP 5.4, он находится в расширении сеанса: http://php.net//manual/pl/session.upload-progress.php

В чистом PHP вы правы:это невозможно.

Если вы используете AJAX-ify для этого, то вы могли бы делать то, что вы описываете.Единственные измерители прогресса, которые я когда-либо видел, находятся в Javascript или Flash, хотя я предполагаю, что Silverlight мог бы сделать и это.

"Старая школа", но PHP + Perl техника: http://www.raditha.com/php/progress.php

На мой взгляд, лучшим / самым простым решением является создание небольшого flash-виджета, который состоит из кнопки "Загрузить" и индикатора выполнения.Flash предоставляет вам очень подробную обратную связь о том, сколько данных было загружено на данный момент, и вы можете создать на ее основе хороший индикатор выполнения.Не требует неэффективного опроса сервера и фактически вообще не требует никаких изменений в коде вашего сервера.Поищите в Google "flash uploader", и вы обнаружите, что многие люди уже написали эти виджеты и с радостью продадут их вам за небольшие деньги.

Я бы порекомендовал посмотреть на SWFUpload Загрузить чтобы достичь того, чего вы хотите.Он довольно гибкий и поддерживает постановку файлов в очередь, так что вы даже можете обрабатывать загрузку нескольких файлов.

Вы определенно захотите пойти с загрузка фантазий Диджитджеральда.Он основан на Mootools & swfuplaod и имеет красивую очередь со статусами, прогрессом, eta и т.д.Это действительно самый простой метод загрузки файлов, который я когда-либо видел.В моем личном случае ivé использовал его, чтобы позволить клиенту выбрать 1,2 гб PDF-файлов и загрузить их.Более новые автоматически переименовываются и версионируются, те же самые пропускаются и т.д.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top