Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Pobieranie pliku na serwer i wysyłanie go 'w locie użytkownikowi'
Greg23
post
Post #1





Grupa: Zarejestrowani
Postów: 120
Pomógł: 0
Dołączył: 6.04.2012

Ostrzeżenie: (0%)
-----


Witam, chciałem stworzyć serwer pośredniczący w pobieraniu plików z sieci.
Problem jest taki, że aby umożliwić użytkownikowi pobranie danego zasobu, musi on zostać
całkowicie pobrany na serwer.

Ja chciałbym to tak zrobić, żeby użytkownik mógł rozpocząć pobieranie pliku, który jest dopiero pobierany na serwer.
Zrobiłem test i jeśli plik na serwer nie został pobrany w 100% a użytkownik próbuje go pobrać z tego serwera to pobiera tylko tą część, któa w tym momencie jest na serwerze.
Czy da się to zrobić tak, żeby user mógł pobrać w całości plik, który jest dopiero zapisywany na serwerze ?


--------------------
Go to the top of the page
+Quote Post
Niktoś
post
Post #2





Grupa: Zarejestrowani
Postów: 1 195
Pomógł: 109
Dołączył: 3.11.2011

Ostrzeżenie: (10%)
X----


Cytat
Czy da się to zrobić tak, żeby user mógł pobrać w całości plik, który jest dopiero zapisywany na serwerze ?

No a niby jak?Z pustego i Salomon nie naleje.To tak jakbyś chciał zobaczyć wynik meczu który jest strimingowany on-live.

Ten post edytował Niktoś 23.07.2012, 16:49:18
Go to the top of the page
+Quote Post
Greg23
post
Post #3





Grupa: Zarejestrowani
Postów: 120
Pomógł: 0
Dołączył: 6.04.2012

Ostrzeżenie: (0%)
-----


No właśnie nie wiem.
Nie jest puste, bo na serwerze jest już plik tylko nie cały i można go wysyłać, tylko pobiera się ta część, któa aktualnie jest na serwerze, ale gdyby
podać błędny rozmiar pliku (jakby był cały pobrany) to chyba by poszło, tylko jak to zrobić ?


--------------------
Go to the top of the page
+Quote Post
Niktoś
post
Post #4





Grupa: Zarejestrowani
Postów: 1 195
Pomógł: 109
Dołączył: 3.11.2011

Ostrzeżenie: (10%)
X----


Cytat
ale gdyby
podać błędny rozmiar pliku


To dostaniesz w rezultacie błędny plik.
Go to the top of the page
+Quote Post
!*!
post
Post #5





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

Ostrzeżenie: (0%)
-----


Nie można. Za bardzo kombinujesz. Wgraj plik na serwer i wtedy go udostępnij, do pobierania.


--------------------
Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta).
Go to the top of the page
+Quote Post
Greg23
post
Post #6





Grupa: Zarejestrowani
Postów: 120
Pomógł: 0
Dołączył: 6.04.2012

Ostrzeżenie: (0%)
-----


Jednak oni jakoś to robią:
http://dloader.pl/

Podając ścieżkę, do kilkuset megowego pliku pobieranie rozpoczyna się prawie że od razu z serwera pośredniczącego.
Czyli mimo iż plik nie został całkowicie pobrany na serwer (bo w mgnieniu oka ten serwis nie pobierze takiego pliku) zostaje on wysyłany do użytkownika.
Więc jednak się da :]


--------------------
Go to the top of the page
+Quote Post
!*!
post
Post #7





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

Ostrzeżenie: (0%)
-----


Ten serwis pobiera pliki bezpośrednio z serwera, a nie w locie. Przecież filmy nie są wgrywane cały czas od kogoś z komputera.


--------------------
Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta).
Go to the top of the page
+Quote Post
Greg23
post
Post #8





Grupa: Zarejestrowani
Postów: 120
Pomógł: 0
Dołączył: 6.04.2012

Ostrzeżenie: (0%)
-----


Jak to bezpośrednio ?
Pliki wysyłane są z serwera dload.pl, więc plik jest pobierany najpierw na dload (z zewnątrz) a potem wysyłany do użytkownika,
nie jest pobierany bezpośrednio z zewnętrznego serwera.


--------------------
Go to the top of the page
+Quote Post
Niktoś
post
Post #9





Grupa: Zarejestrowani
Postów: 1 195
Pomógł: 109
Dołączył: 3.11.2011

Ostrzeżenie: (10%)
X----


To jest strimingowanie.Plik pobierany na serwerze musi być zawsze większy od pliku ,który użytkownik aktualnie pobiera.Kiedy użytkownik pobiera krytyczną ilość danych a serwer wciąż pobiera plik to proces dawnloadu u użytkownika zostaje zatrzymany i ponownie wznowiony, kiedy serwer uploaduje dostateczną ilość danych żeby mógł ją przesłać.Efekt jest taki ,że użytkownikowi wydaje się jakby ciągle pobierał dane, a w cale tak nie jest.

Ten post edytował Niktoś 23.07.2012, 17:07:59
Go to the top of the page
+Quote Post
Greg23
post
Post #10





Grupa: Zarejestrowani
Postów: 120
Pomógł: 0
Dołączył: 6.04.2012

Ostrzeżenie: (0%)
-----


Więc w jaki sposób streamingować użytkownikowi plik, który aktualne jest pobierany na serwer ?


--------------------
Go to the top of the page
+Quote Post
Niktoś
post
Post #11





Grupa: Zarejestrowani
Postów: 1 195
Pomógł: 109
Dołączył: 3.11.2011

Ostrzeżenie: (10%)
X----


Chyba najłatwiej byłoby to zrobić na socketach. Popatrz na biblioteki node.js.
Go to the top of the page
+Quote Post
Greg23
post
Post #12





Grupa: Zarejestrowani
Postów: 120
Pomógł: 0
Dołączył: 6.04.2012

Ostrzeżenie: (0%)
-----


Byłbyś w stanie coś takiego zrobić ?


--------------------
Go to the top of the page
+Quote Post
Niktoś
post
Post #13





Grupa: Zarejestrowani
Postów: 1 195
Pomógł: 109
Dołączył: 3.11.2011

Ostrzeżenie: (10%)
X----


Raczej nie, ja programuje w c# net. Ale pewnie są tacy co by umieli.

Wynik tej funkcji należałoby przesłać po sockecie
Cytat
function fwrite_stream($fp, $string) {
for ($written = 0; $written < strlen($string); $written += $fwrite) {
$fwrite = fwrite($fp, substr($string, $written));
if ($fwrite === false) {
return $written;
}
}
return $written;
}
?>

Utworzyć :
Cytat
stream.setEncoding('utf8');
stream.addListener($written, function (line) {
// Pausowanie streamingu jeśli zachodziła by ku temu potrzeba
stream.pause();
// make async API call...
makeAPICall(line, function() {
// wznawianie streamingu
stream.resume();
});
})


To taki pseudokod-może ktoś to poprawi i rozwinie:)

Ten post edytował Niktoś 23.07.2012, 18:02:03
Go to the top of the page
+Quote Post
Greg23
post
Post #14





Grupa: Zarejestrowani
Postów: 120
Pomógł: 0
Dołączył: 6.04.2012

Ostrzeżenie: (0%)
-----


Wielkie dzięki za pomoc, spróbuje to jakoś ogarnąć :]


--------------------
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 16:55