Я уверен, что это было задано раньше, но поскольку я не могу найти хороший ответ, я здесь, спрашиваю … снова. 🙂
Есть ли способ, используя только смесь HTML, JavaScript / AJAX и PHP, чтобы сообщить о фактическом ходе загрузки файла?
В ответ кому-либо, предлагающему SWFUpload или подобное:
Я знаю все об этом. Спустился по этой дороге. Я ищу 100% -ное решение (и да, я знаю, что, вероятно, не получу его).
Если вы можете добавить пакеты PECL в свой PHP, есть пакет uploadprogress .
Самый простой способ – просто использовать swfupload.
Для мониторинга загрузки файлов с помощью PHP / Javascript требуется расширение PECL:
uploadprogress
Хорошим примером кода, необходимого для отображения прогресса для ваших пользователей, является:
Uber Uploader
Если я не ошибаюсь, он использует JQuery для общения с PHP.
Вы тоже можете написать это, это не так сложно.
Добавьте скрытый элемент в качестве первого элемента формы загрузки, названного UPLOAD_IDENTIFIER
.
uploadprogress_get_info( UPLOAD_IDENTIFIER )
скрипт PHP, который вызывает uploadprogress_get_info( UPLOAD_IDENTIFIER )
Он возвращает массив, содержащий следующее:
time_start - время начала загрузки (временная отметка unix), time_last - время последнего обновления информации о ходе работы, speed_average - Средняя скорость в байтах в секунду, speed_last - Последняя измеренная скорость в байтах в секунду, bytes_uploaded - Количество загруженных байтов, bytes_total - значение заголовка Content-Length, отправленного браузером, files_uploaded - Количество загруженных файлов, est_sec - Предполагаемое количество оставшихся секунд.
Пусть PHP вернет информацию в Javascript, и у вас должно быть много информации. В зависимости от аудитории вы, скорее всего, не будете использовать всю имеющуюся информацию.
Если у вас установлен APC (и к этому моменту вам действительно нужно, оно будет стандартным для PHP6), у него есть возможность включить отслеживание загрузки. Там есть документация , и Rasmus написал образец кода, который использует YUI.
Есть ли способ, используя только смесь 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. Но это огромная работа для относительно небольшого выигрыша.)
Я бы рекомендовал вам пять FancyUpload попробовать это действительно крутое решение для индикатора выполнения, и это необязательно связано с php. Оформить заказ и другие инструменты на digitarald.de
ура
IMHO, это проблема, которую должны решить веб-браузеры. У нас есть метр прогресса для загрузки, так почему бы и не загрузить?
Взгляните на это, например: