Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Поговрим про прогресс бары аплоада файлов
Покинул форум
Сообщений всего: 97
Дата рег-ции: Июль 2008 Откуда: Новокузнецк
Помог: 0 раз(а)
Вообщем известно что на пхп такого сделать нельзя.
Пхп не знает размер загружаемого файла до его полной закачки. А можно сделать это на перле.
Но тут столкнулся с такой проблемой (в нете нашёл что у многих такая проблема но решения не видел) скрипты аплоадеры (написанные на перле) не работают на некоторыъ серверах - я заметил что как раз на тех где перл стоит как mpd_perl
тут он также получается не знает размер файла до его полной закачки (я бился с этим 2 дня пока не понял что перл так же как и пхп в таком случае ничего не знает о файле до его полной зарузки)
Кроме как устанавливать перл отдельно - нет никаких идей ?
Я не специалист в области универсальных решений, но всегда имею свою идею решения проблемы, пусть она даже и очень громоздкая
Итак, создаем скрипт на Perl, который должен получать файл. Предположим, что закачиваемый файл очень большой. Разуммется, форма передается в miltipart. В каждой части multipart есть свой заголовок, и по идее там есть размер файла, мы успешно считываем его. Потом читаем бинарный поток из STDIN. Время от времени (Допучтим раз в 300 Кб) создаем (перезаписывем) специальный файл, где пишем скольк байт мы уже считали из скольких
Пишем еще один небольшой Perl-скриптик, читающи информацию с этого файла
В HTML-документе с формой-закачкой обрабытываем событие submit и запускаем через время функцию, вызавающую второй мини Perl-скрипт. Считываем процентное содержание закачки и рисуем прогресс-бар
Учтите, что это будет хорошо работать если речь идет о достаточно больших объемах файлов и не-низкой скорости интернет-соеднения (Чтобы время выполнения перовго скрипта было в разы больше времени выполнения второго. Иначе мы получим следующее: если файл маленький, то он закачается мгновенно и прогресс не нужен; если скорость интернета маленькая, то мы не должемся второго скрипта)
Вероятно (Более чем вероятно) есть элегантное решение этой проблемы. Насколько мне известно, WP использует upload с помощью ActiveX-элемента от Adode Flash - Flash Uploader
_kT
Отправлено: 29 Июля, 2008 - 06:51:13
Гость
Покинул форум
Сообщений всего: 97
Дата рег-ции: Июль 2008 Откуда: Новокузнецк
Помог: 0 раз(а)
Вообще - то так оно и делается всегда. Перл используют в этом деле потому что пхп так скомпиплин , что не может поулчить информацию о файле пока не закачается полность.
В один проект добавлял такой скрипт и столкнулся с прблемой (собственно из - ща чего создала этот пост )) ) на севрере стоит ngnix и из - за него не получалось сделать прогресс бар (дня 2 мучался) - он вообщем буферизацию пот запросов делал - в итоге перлу нечего размер было смотерть, tmp был пуст, а этот прокси-реверс отдала апачу файл тока после полной его загрузки - в итоге прогресс бар долго стоит на нуле, а потмо сразу 100%
Решения пока такое (дырвое )) ) апач выкинули в нет под другим портом (81) а 80 так и оставили ngnix - и этот аплоадер как раз сделали чтобы работал через этот 81 порт. Вот так то ))
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
JustUserR пишет:
Итак, создаем скрипт на Perl, который должен получать файл
...
JustUserR пишет:
Пишем еще один небольшой Perl-скриптик, читающи информацию с этого файла
...
Уважаемый JustUserR, пожалуйста, не забывайте, что данный форум посвящен PHP. Никто, конечно, ничего против Perl не имеет (в частности, он незаменим для всего бэкенда чаще всего бывает), но просто очень часто наблюдаю у Вас такие советы.
Либо же нужно писать не в "Программирование на 'PHP"
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
UA.ProG
Отправлено: 29 Июля, 2008 - 10:44:16
Частый гость
Покинул форум
Сообщений всего: 171
Дата рег-ции: Июль 2008 Откуда: Николаев,Украина
Покинул форум
Сообщений всего: 97
Дата рег-ции: Июль 2008 Откуда: Новокузнецк
Помог: 0 раз(а)
Да эту тему я думаю лушче перенести в программирование на перл, потму что опять же пхп (в стандартном исполнени) не может делат такое (им максимум можно добаиться - это узнавать размер файла во время закачки - но конечный размер он заранее знать не может - то есть не знаем сколько процентов загружено) а у перла порядок передачи заголовким несколько иной и он сначала узнаёт сколько весит файл а тока потом его начинает закачивать.
Хотя на пхп есть спц расширения APC , вообщем патчить , перекомпиливать пхп и можно будет сделать это на пхп, даже где - т овидел рабочие примеры.
Покинул форум
Сообщений всего: 171
Дата рег-ции: Июль 2008 Откуда: Николаев,Украина
Помог: 0 раз(а)
[+]
Парень просил не текущие % загрузки файла , а только размер файла, можно просто получить пусть к файлу сразу и по путю узнать его размер. а вообще хз может и на пхп можно и по % узнать, гуру надо бытьа мы середнячек
Покинул форум
Сообщений всего: 391
Дата рег-ции: Янв. 2007
Помог: 0 раз(а)
А если рассуждать так:
1) Есть файл который закачивается
2) Если ПХП скрипт который возвращает размер файла (при заливке он то есть, узнаем сколько мы уже залили и вычисляем процент)
3) AJAX результаты пункта 2 возвращает
_kT
Отправлено: 29 Июля, 2008 - 22:38:24
Гость
Покинул форум
Сообщений всего: 97
Дата рег-ции: Июль 2008 Откуда: Новокузнецк
Помог: 0 раз(а)
опять же. чтобы узнать процент нада значть конечнй размер файла.
как ты процент то посчитаешь если не знаешь конечный вариант загрузки.
у тебя будет файлик всё увеличиваться и увеличиваться - а может пользователь заливает те 3 части властелина колец и анталогию звёздынх воинов - в одном архиве ))
расширения на пхп нада ставить APC - тут один человек тока ставил его, но ничего не получилос всё равно.
Кстати может кто знает какие патчи на пхп или хорошую инструкцию как перекомпилить пхп чтобы он сначала узнал конечный размер файла и тока потом начал качать - это было бы неплохо ))
Покинул форум
Сообщений всего: 97
Дата рег-ции: Июль 2008 Откуда: Новокузнецк
Помог: 0 раз(а)
ну это покажет текущий размер. то есть файл качается и filesize($file) будет показыват мне его постеменно увеличивающийся размер.
Но вы в школе то учились? )))
процент посчитать:
текущий размер делим на конечнй размер и умножаем на 100.
текущий размер ты узнаешь через функцию какую ты написал, а как конечный то узнать, файл то качается - и мы не знаем сколько он ещё будет качаться. Пользователь тебе нигде не напишет что он загружает файл размером стока то метров.
Уважаемый JustUserR, пожалуйста, не забывайте, что данный форум посвящен PHP. Никто, конечно, ничего против Perl не имеет (в частности, он незаменим для всего бэкенда чаще всего бывает), но просто очень часто наблюдаю у Вас такие советы.
Либо же нужно писать не в "Программирование на 'PHP"
Э-э-э... Извиняюсь Просто хотел помочь
UA.ProG
Отправлено: 31 Июля, 2008 - 20:00:14
Частый гость
Покинул форум
Сообщений всего: 171
Дата рег-ции: Июль 2008 Откуда: Николаев,Украина
Помог: 0 раз(а)
[+]
Цитата:
Пхп не знает размер загружаемого файла до его полной закачки
Слушай я тебе говорил что как определить размер до загрузки на сервер!
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.