PDA

Просмотр полной версии : progress bar на php для загрузки файлов


mastergrom
31.10.2008, 21:12
Доброго времени суток!

Возникла необходимость сделать progressbar для загрузки файлов на сервер через форму.
То есть, есть php страница в которой есть форма и ее обработчик.. Загружаемых файлов может быть много... И помимо файлов обработчику передаются текстовые данные..
Погуглив, я нашел десяток решений, но не одно из них не подошло .. В большинстве случаев нужно устанавлвать pecl для php и использовать как обработчик CGI скрипт .. Неплохим показался jQuery progressbar но он работает только на php 5.2 ...
Может есть у кого-то рабочий вариант, который сможет показывать progress загрузки, скажем, 10 файлов ?

Dizainoff
01.11.2008, 20:27
Я конечно могу ошибаться но мне казалось что PHP скрипт начинает срабатывать уже после того как файл на сервер был залит и следовательно данный скрипт не может отследить процесс загрузки.
Скорее всего это можно реализовать путем разработки плагина для самого сервера и при передачи файла на сервер необходимо будет делать параллельно еще запросы с определенным интервалом для определения процента загрузки (AJAX). И еще раз я повторюсь что я могу ошибаться. Но я точно знаю что php страница скрипт не может содержать форму, она только генерирует HTML страницу

ilzhan
02.11.2008, 21:10
Если сервер свой то можно использовать NginxHttpUploadProgressModule (http://wiki.codemongers.com/NginxHttpUploadProgressModule)

Добавлено через 2 минуты
Если вариант http://www.swfupload.org/ но менее точный

opasnoste
03.11.2008, 17:44
Если сервер свой то можно использовать NginxHttpUploadProgressModule (http://wiki.codemongers.com/NginxHttpUploadProgressModule)

Поддерживаю, хорошая штука.

PHP тут ни при чем, ибо средствами PHP такого не сделать в принципе — интерпретатор запускается только после того, как файл полностью загружен.

На Flex можно минуты за полторы наклепать.

Crazy
04.11.2008, 11:43
PHP тут ни при чем, ибо средствами PHP такого не сделать в принципе — интерпретатор запускается только после того, как файл полностью загружен.

Ваше мнение неправильное, но спорное. Начиная с 5.2 (http://www.ibm.com/developerworks/opensource/library/os-php-v525/index.html) вполне работает отслеживание процесса загрузки из PHP:

<?php
if(isset($_GET['progress_key'])) {

$status = apc_fetch('upload_'.$_GET['progress_key']);
echo $status['current']/$status['total']*100;

}
?>

opasnoste
04.11.2008, 19:35
За ссылку спасибо, конечно. Проблема в том, что пока APC не будет включен в стандартную сборку PHP — описанные в статье костыли выглядят вполне себе бесполезно.

В большинстве случаев мы говорим о развертывании скрипта на shared hosting, где у пользователя нет возможности пересобрать интерпретатор и/или прикрутить расширение. Если же такая возможность есть, то нафига вообще загрузку файлов делать на PHP, когда есть куда более жизнерадостные способы — тот же NginxHttpUploadProgressModule.

Не стоит забывать также и о том, что нововведения в PHP, как правило, весьма глюкавы. Раз не внесли в стандартную сборку — значит, сыровато еще, вестимо.

Ваше мнение неправильное, но спорное.

Crazy
04.11.2008, 20:03
В большинстве случаев мы говорим о развертывании скрипта на shared hosting, где у пользователя нет возможности пересобрать интерпретатор и/или прикрутить расширение.

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

Не стоит забывать также и о том, что нововведения в PHP, как правило, весьма глюкавы.

Рекомендую обратить внимание на дату, когда эта фича появилась в PHP.

Раз не внесли в стандартную сборку — значит, сыровато еще, вестимо.

Сырость -- далеко не единственная причина невключения тех или иных расширений в штатную поставку.