Создание панели выполнения файлов в PHP

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

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

Мысли?

Solutions Collecting From Web of "Создание панели выполнения файлов в PHP"

Вы можете попробовать YUI или Prototype или JQuery

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

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

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

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

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

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

До сих пор наиболее распространенный способ сделать это – SWFUpload: http://www.swfupload.org/

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

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

Больше объяснений:

Пример Rasmus:

Из 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 дает вам очень подробную информацию о том, сколько данных было загружено до сих пор, и вы можете создать хороший индикатор выполнения на основе этого. Не требует неэффективного опроса сервера и фактически не требует каких-либо изменений на ваш код сервера. Google для «флеш-загрузчика», и вы обнаружите, что многие люди уже написали эти виджеты и с удовольствием продают их вам за доллар.

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

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