Pobieranie plików wget/aria2c

Kategoria: Javascript, HTML i CSS



Michalos
10 sierpień 2009 - 13:24
Witam!

Napisałem prosty skrypt do pobierania plików wgetem/aria2c na serwer poprzez wykonanie polecenia na serwerze funkcją exec().

Na serwerze jest co prawda szybkie łącze, ale przy większych plikach trochę trzeba odczekać zanim plik się wczyta na serwer. Stąd moje pytanie czy istnieje szansa na wyświetlenie prędkości pobierania bądź pozostałego czasu do wczytania pliku na serwer ( te dwie rzeczy są co prawda ze sobą powiązane - jak będę miał prędkość to i pozostały czas).

Jeszcze mam pytanie czy za pomocą tych programów (wget/aria2c) można od razu wysyłać plik do użytkownika, nie czekając na całkowite załadowanie pliku na serwer ( pobieranie/wysyłanie w locie ) ?

Oczekuję jakiś wskazówek jak to można wykonać. Dzięki za pomoc.

Pozdrawiam
aseeon
10 sierpień 2009 - 14:34
W między czasie jak zastanowię się jak to zrobić, można byłoby zobaczyć twój kod?
Michalos
10 sierpień 2009 - 15:25
W między czasie jak zastanowię się jak to zrobić, można byłoby zobaczyć twój kod?



Co tu jest do oglądania :P w skrócie:

exec(aria2c adres_pliku_do_pobrania)

Zamiast exec można użyć passtru albo system.

passtru() i system() są bardzo podobne do exec, z tą różnicą że pokazują wynik działania w przeglądarce.
chommik
10 sierpień 2009 - 15:44
Ten kod pobierze plik i wyrzuci zawartość do przeglądarki. :)
<? $f = fopen('http://noc.gts.pl/10mb.gts','r'); // przykladowy plik, 10MB while (!feof($f)) { echo fgets($f,1024); } ?>
Michalos
10 sierpień 2009 - 15:54
Ten kod pobierze plik i wyrzuci zawartość do przeglądarki. :)
<? $f = fopen('http://noc.gts.pl/10mb.gts','r'); // przykladowy plik, 10MB while (!feof($f)) { echo fgets($f,1024); } ?>



Nie chodzi mi o to aby zawartość pliku wyrzucić do przeglądarki, lecz żeby user pobrał plik przez mój serwer. Klika pobierz i w locie plik idzie na serwer i zaraz idzie do usera.
pbnan
10 sierpień 2009 - 17:03
Napisałem na WT, to i tutaj napiszę:

Pobieranie pozostałego czasu może być trochę skomplikowane. wget wyświetla czas pozostały do pobrania jak i prędkość na wyjściu (z którego przekierowaniem przez potoki są problemy). Można go zmusić do wysyłania wyjścia do pliku oraz do działania w tle przez odpowiednie parametry. Dzięki temu możesz napisać skrypt, który parsuje ten plik i wyciąga ile czasu pozostało do końca. Ponadto dzięki działaniu w tle nie blokuje on wykonywania strony.

Przykładowe wywołanie wgeta:
wget -c http://ftp.pwsz.elblag.pl/pub/linux/distributions/archlinux/iso/2009.08/archlinux-2009.08-netinstall-i686.img -b -o wget_output
W pliku wget_output jest wszystko, co potrzeba.

Może jeszcze się przydać parametr -nv, dzięki któremu będzie trochę mniej pierdół na wyjściu (nie testowałem, czy czegoś ważnego to nie usuwa).
aseeon
10 sierpień 2009 - 18:34
Ja bym to zrobił tak:
<?php $t = tempnam(); exec('wget --progress=dot adres_pliku_do_pobrania 2>'.$t); $stderror = file_get_contents($t); ?>

Aby w pełni zrozumieć co się dzieje trzeba wiedzieć dwie rzeczy, wget z opcja --progress=dot wyrzuca postep pobierania pliku (ile juz pobralo KB, ile juz pobrało %, predkość) do stderr, a 2> przekierowuje stderr gdzie chcemy.
Michalos
10 sierpień 2009 - 20:10
Dzięki panowie za odpowiedzi, rady.

Postaram się to przetestować.

Dzięki raz jeszcze. Pozdro
Michalos
13 sierpień 2009 - 23:04
Jeszcze mam jedną sprawę do wyjaśnienia. Jeśli chodzi o to pobieranie/wysyłanie w locie, to można by to rozegrać poprzez proxy, przy tym ze mój serwer byłby proxy.

Plik na pewnym serwisie -> mój serwer/proxy -> użytkownik

Pytam czy ktoś ma doświadczenie przy takim rozwiązaniu tej sprawy ;) ?

Dzięki i pozdrawiam.


Podobne tematy:
Problem z pobieraniem plików (próbowąłem wget, biblioteki Perla).
[vb6] pobieranie plików z serwera
Ograniczenia w pobieraniu plików...
pobieranie plików
[szukam] program do pobierania plikow mp3
Problem z pobieraniem plików (próbowąłem wget, biblioteki Perla).