Загружать прогресс, используя чистый PHP / AJAX? - PullRequest
8 голосов
/ 17 марта 2009

Я уверен, что об этом уже спрашивали, но так как я не могу найти хороший ответ, вот я спрашиваю ... снова. :)

Есть ли способ, используя только смесь HTML, JavaScript / AJAX и PHP, сообщать о фактическом ходе загрузки файла?

В ответ на любое предложение SWFUpload или подобное:

Я знаю все об этом. Вниз по этой дороге. Я ищу 100% чистое решение (и да, я знаю, что, вероятно, не получу его).

Ответы [ 6 ]

5 голосов
/ 17 марта 2009

Контроль загрузки файлов с помощью PHP / Javascript требует расширения PECL:

uploadprogress

Хороший пример кода, необходимого для отображения прогресса ваших пользователей:

Uber Uploader

Если я не ошибаюсь, он использует JQuery для связи с PHP.


Вы также можете написать это сами, это не так сложно.

Добавить скрытый элемент в качестве первого элемента формы загрузки с именем UPLOAD_IDENTIFIER.

Опрос PHP-скрипта, который вызывает uploadprogress_get_info( UPLOAD_IDENTIFIER ) Возвращает массив, содержащий следующее:

time_start     - The time that the upload began (unix timestamp),
time_last      - The time that the progress info was last updated,
speed_average  - Average speed in bytes per second,
speed_last     - Last measured speed in bytes per second,
bytes_uploaded - Number of bytes uploaded so far,
bytes_total    - The value of the Content-Length header sent by the browser,
files_uploaded - Number of files uploaded so far,
est_sec        - Estimated number of seconds remaining.

Пусть PHP вернет информацию в Javascript, и у вас должно быть много информации. В зависимости от аудитории вы, вероятно, не будете использовать всю имеющуюся информацию.

2 голосов
/ 17 марта 2009

Если у вас установлен APC (и к этому моменту вы действительно должны; это будет стандартно в PHP6), у него есть возможность включить отслеживание загрузки. Есть некоторая документация , и Расмус написал пример кода , который использует YUI.

1 голос
/ 17 марта 2009

Если вы можете добавить пакеты PECL в ваш PHP, есть пакет uploadprogress .

Самый простой способ - просто использовать swfupload.

1 голос
/ 17 марта 2009

Есть ли способ, используя только смесь HTML, JavaScript / AJAX и PHP, сообщать о фактическом ходе загрузки файла?

Я не знаю ни одного способа отслеживания загрузки простых файлов HTML (multipart / form-data) в PHP, загруженный веб-сервером.

Вам нужно иметь доступ к прогрессу анализатора multipart / form-data при поступлении данных, но это выглядит невозможным, потому что способы доступа к телу HTTP-запроса из PHP ( $ HTTP_RAW_POST_DATA и php: // input ) задокументированы как «недоступные с enctype =« multipart / form-data »».

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

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

0 голосов
/ 17 марта 2009

ИМХО, это проблема, которую должны решить веб-браузеры. У нас есть индикатор загрузки для загрузки, так почему бы и для загрузки?

Взгляните на это, например:

http://www.fireuploader.com/

0 голосов
/ 17 марта 2009

Я бы порекомендовал вам пять FancyUpload , попробуйте это действительно крутое решение для индикатора выполнения, и оно не обязательно подключено к php. Проверьте также другие инструменты на digitarald.de

ура

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...