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 :: Поговрим про прогресс бары аплоада файлов

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
_kT
Отправлено: 27 Июля, 2008 - 21:34:54
Post Id



Гость


Покинул форум
Сообщений всего: 97
Дата рег-ции: Июль 2008  
Откуда: Новокузнецк


Помог: 0 раз(а)




Вообщем известно что на пхп такого сделать нельзя.

Пхп не знает размер загружаемого файла до его полной закачки. А можно сделать это на перле.
Но тут столкнулся с такой проблемой (в нете нашёл что у многих такая проблема но решения не видел) скрипты аплоадеры (написанные на перле) не работают на некоторыъ серверах - я заметил что как раз на тех где перл стоит как mpd_perl
тут он также получается не знает размер файла до его полной закачки (я бился с этим 2 дня пока не понял что перл так же как и пхп в таком случае ничего не знает о файле до его полной зарузки)

Кроме как устанавливать перл отдельно - нет никаких идей ?


-----
http://www[dot]razbor[dot]org/ - б/у автозапчасти
 
 Top
_kT
Отправлено: 28 Июля, 2008 - 10:45:51
Post Id



Гость


Покинул форум
Сообщений всего: 97
Дата рег-ции: Июль 2008  
Откуда: Новокузнецк


Помог: 0 раз(а)




и кстати какие могутбыть проблемы при создании аплоадеров, если сервер использует ngnix


-----
http://www[dot]razbor[dot]org/ - б/у автозапчасти
 
 Top
Гость
Отправлено: 29 Июля, 2008 - 00:36:45
Post Id


УДАЛЁН










Я не специалист в области универсальных решений, но всегда имею свою идею решения проблемы, пусть она даже и очень громоздкая Улыбка

Итак, создаем скрипт на Perl, который должен получать файл. Предположим, что закачиваемый файл очень большой. Разуммется, форма передается в miltipart. В каждой части multipart есть свой заголовок, и по идее там есть размер файла, мы успешно считываем его. Потом читаем бинарный поток из STDIN. Время от времени (Допучтим раз в 300 Кб) создаем (перезаписывем) специальный файл, где пишем скольк байт мы уже считали из скольких
Пишем еще один небольшой Perl-скриптик, читающи информацию с этого файла
В HTML-документе с формой-закачкой обрабытываем событие submit и запускаем через время функцию, вызавающую второй мини Perl-скрипт. Считываем процентное содержание закачки и рисуем прогресс-бар

Учтите, что это будет хорошо работать если речь идет о достаточно больших объемах файлов и не-низкой скорости интернет-соеднения (Чтобы время выполнения перовго скрипта было в разы больше времени выполнения второго. Иначе мы получим следующее: если файл маленький, то он закачается мгновенно и прогресс не нужен; если скорость интернета маленькая, то мы не должемся второго скрипта)

Вероятно (Более чем вероятно) есть элегантное решение этой проблемы. Насколько мне известно, WP использует upload с помощью ActiveX-элемента от Adode Flash - Flash Uploader
 
 Top
_kT
Отправлено: 29 Июля, 2008 - 06:51:13
Post Id



Гость


Покинул форум
Сообщений всего: 97
Дата рег-ции: Июль 2008  
Откуда: Новокузнецк


Помог: 0 раз(а)




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

В один проект добавлял такой скрипт и столкнулся с прблемой (собственно из - ща чего создала этот пост )) ) на севрере стоит ngnix и из - за него не получалось сделать прогресс бар (дня 2 мучался) - он вообщем буферизацию пот запросов делал - в итоге перлу нечего размер было смотерть, tmp был пуст, а этот прокси-реверс отдала апачу файл тока после полной его загрузки - в итоге прогресс бар долго стоит на нуле, а потмо сразу 100%

Решения пока такое (дырвое )) ) апач выкинули в нет под другим портом (81) а 80 так и оставили ngnix - и этот аплоадер как раз сделали чтобы работал через этот 81 порт. Вот так то ))


-----
http://www[dot]razbor[dot]org/ - б/у автозапчасти
 
 Top
EuGen Администратор
Отправлено: 29 Июля, 2008 - 09:51:36
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




JustUserR пишет:
Итак, создаем скрипт на Perl, который должен получать файл

...
JustUserR пишет:
Пишем еще один небольшой Perl-скриптик, читающи информацию с этого файла

...
Уважаемый JustUserR, пожалуйста, не забывайте, что данный форум посвящен PHP. Никто, конечно, ничего против Perl не имеет (в частности, он незаменим для всего бэкенда чаще всего бывает), но просто очень часто наблюдаю у Вас такие советы.
Либо же нужно писать не в "Программирование на 'PHP"


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
UA.ProG
Отправлено: 29 Июля, 2008 - 10:44:16
Post Id



Частый гость


Покинул форум
Сообщений всего: 171
Дата рег-ции: Июль 2008  
Откуда: Николаев,Украина


Помог: 0 раз(а)

[+]


-? не работает??
Ведь заголовок передаеться с путем файла
Если ты всё же надумаешь ее использовать, то используй ее лучше таким способом:



-----
--------------MoZG--------------
---------Google спасёт мир------
 
 Top
_kT
Отправлено: 29 Июля, 2008 - 12:36:45
Post Id



Гость


Покинул форум
Сообщений всего: 97
Дата рег-ции: Июль 2008  
Откуда: Новокузнецк


Помог: 0 раз(а)




Да эту тему я думаю лушче перенести в программирование на перл, потму что опять же пхп (в стандартном исполнени) не может делат такое (им максимум можно добаиться - это узнавать размер файла во время закачки - но конечный размер он заранее знать не может - то есть не знаем сколько процентов загружено) а у перла порядок передачи заголовким несколько иной и он сначала узнаёт сколько весит файл а тока потом его начинает закачивать.

Хотя на пхп есть спц расширения APC , вообщем патчить , перекомпиливать пхп и можно будет сделать это на пхп, даже где - т овидел рабочие примеры.


-----
http://www[dot]razbor[dot]org/ - б/у автозапчасти
 
 Top
UA.ProG
Отправлено: 29 Июля, 2008 - 16:54:17
Post Id



Частый гость


Покинул форум
Сообщений всего: 171
Дата рег-ции: Июль 2008  
Откуда: Николаев,Украина


Помог: 0 раз(а)

[+]


Парень просил не текущие % загрузки файла , а только размер файла, можно просто получить пусть к файлу сразу и по путю узнать его размер. а вообще хз может и на пхп можно и по % узнать, гуру надо бытьУлыбкаа мы середнячек


-----
--------------MoZG--------------
---------Google спасёт мир------
 
 Top
kamikadze
Отправлено: 29 Июля, 2008 - 18:46:07
Post Id



Склонен к самоубийству


Покинул форум
Сообщений всего: 391
Дата рег-ции: Янв. 2007  


Помог: 0 раз(а)




А если рассуждать так:
1) Есть файл который закачивается
2) Если ПХП скрипт который возвращает размер файла (при заливке он то есть, узнаем сколько мы уже залили и вычисляем процент)
3) AJAX результаты пункта 2 возвращает
 
 Top
_kT
Отправлено: 29 Июля, 2008 - 22:38:24
Post Id



Гость


Покинул форум
Сообщений всего: 97
Дата рег-ции: Июль 2008  
Откуда: Новокузнецк


Помог: 0 раз(а)




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

Кстати может кто знает какие патчи на пхп или хорошую инструкцию как перекомпилить пхп чтобы он сначала узнал конечный размер файла и тока потом начал качать - это было бы неплохо ))


-----
http://www[dot]razbor[dot]org/ - б/у автозапчасти
 
 Top
UA.ProG
Отправлено: 30 Июля, 2008 - 00:52:54
Post Id



Частый гость


Покинул форум
Сообщений всего: 171
Дата рег-ции: Июль 2008  
Откуда: Николаев,Украина


Помог: 0 раз(а)

[+]


Слушай через заголовок файла путь к нему filesize($file)


-----
--------------MoZG--------------
---------Google спасёт мир------
 
 Top
_kT
Отправлено: 30 Июля, 2008 - 10:04:55
Post Id



Гость


Покинул форум
Сообщений всего: 97
Дата рег-ции: Июль 2008  
Откуда: Новокузнецк


Помог: 0 раз(а)




ну это покажет текущий размер. то есть файл качается и filesize($file) будет показыват мне его постеменно увеличивающийся размер.

Но вы в школе то учились? )))
процент посчитать:
текущий размер делим на конечнй размер и умножаем на 100.

текущий размер ты узнаешь через функцию какую ты написал, а как конечный то узнать, файл то качается - и мы не знаем сколько он ещё будет качаться. Пользователь тебе нигде не напишет что он загружает файл размером стока то метров.


-----
http://www[dot]razbor[dot]org/ - б/у автозапчасти
 
 Top
Гость
Отправлено: 31 Июля, 2008 - 19:07:18
Post Id


УДАЛЁН










Цитата:
Уважаемый JustUserR, пожалуйста, не забывайте, что данный форум посвящен PHP. Никто, конечно, ничего против Perl не имеет (в частности, он незаменим для всего бэкенда чаще всего бывает), но просто очень часто наблюдаю у Вас такие советы.
Либо же нужно писать не в "Программирование на 'PHP"

Э-э-э... Извиняюсь Улыбка Просто хотел помочь
 
 Top
UA.ProG
Отправлено: 31 Июля, 2008 - 20:00:14
Post Id



Частый гость


Покинул форум
Сообщений всего: 171
Дата рег-ции: Июль 2008  
Откуда: Николаев,Украина


Помог: 0 раз(а)

[+]


Цитата:
Пхп не знает размер загружаемого файла до его полной закачки

Слушай я тебе говорил что как определить размер до загрузки на сервер!


-----
--------------MoZG--------------
---------Google спасёт мир------
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB