coderek
5.04.2013, 23:21:07
Witam, przejdę od razu do rzeczy. Mam do napisania serwis internetowy gdzie główną jego funkcją jest wysyłanie plików graficznych. Nie jest to serwis w rodzaju rapidshare itp. a raczej coś w rodzaju zamawiania zdjęć.
Podstawowe pytanie to czy PHP +Apache + HTTP da sobię z tym radę. Chodzi o to, że plików może być wysyłanych kilkaset na raz, gdzie rozmiar całkowity wszystkich plików może dojść go kilkunastu (kilkuset?) GB. Wiem, że PHP ma ograniczenia w wysyłaniu plików i wiem, że moża to zmienic, ale to, że zmienię odpowiednią konfigurację w pliku php.ini nie znaczy, że problem rozwiązany. Całe to wysyłanie mam zamiar wykonać w JS/jQuery/Ajax i PHP ($_FILES). Wiem też, że są wtyczki w Flash'u do wysyłania plików i tutaj raczej nie było by problemu, jednak chciałbym Adobe Flash wykluczyć.
Więc, czy PHP / Apache / HTTP sobie z tym poradzi?
Z góry dzięki za wszelkie odpowiedzi/wskazówki.
markonix
6.04.2013, 00:51:28
Cytat(coderek @ 6.04.2013, 00:21:07 )

Wiem też, że są wtyczki w Flash'u do wysyłania plików i tutaj raczej nie było by problemu, jednak chciałbym Adobe Flash wykluczyć.
Słusznie.
http://www.plupload.com/download.php
coderek
6.04.2013, 23:10:29
Jak ten tool
Plupload ma się do tego o co ja pytałem?
markonix
6.04.2013, 23:14:30
Oki wybacz.
Tak, PHP / Apache / HTTP sobie z tym poradzi.
A skrypt, który podałem jest konkretnym rozwiązaniem (to nie tylko oprawka wizualna, czy kolejkowanie plików).
coderek
6.04.2013, 23:23:07
Skrypt ja już mam
http://blueimp.github.io/jQuery-File-Upload/ i na tyle na ile testowałem, to raczej problemów nie ma na "zwykłym" serwerze.
Trzeba będzie po prosty najpierw skontaktować się z jakąś firmą hostingową aby dali odpowiednie parematry serwera żeby taka www działała odpowiednio.
Zadzwonie po niedzieli to kilku firm i popytam jak to wygląda.
markonix
7.04.2013, 01:21:19
Skoro nawet nie chodzi tu o wielkość pojedynczego pliku (bo tak najpierw zrozumiałem) tylko ich sumaryczną ilość to nie wiem jakie widzisz tu ograniczenie w PHP / SERWERZE czy gdzie indziej. To po prostu ogólny transfer jak każda akcja na stronie no i obciążenie łącza.
No i jeszcze "kilkaset na raz" też można dwojako zrozumieć - czy chodzi o to równoległy upload kilku plików jednocześnie przez jednego użytkownika czy po prostu, że strona będzie miała tak duże obciążenie.
Crozin
7.04.2013, 06:43:50
Tutaj najistotniejsza jest możliwość wznawiania wysyłania plików. Wgranie kilku GiB danych może zająć bardzo dużo czasu - wyobraź sobie, że przy 90% nagle tracisz połączenie z internetem i kilka godzin wgrywania przepada.
https://www.google.com/search?q=file+upload...me&ie=UTF-8
markonix
7.04.2013, 11:11:30
No ale on mówił o dużej ilości, nie koniecznie dużych plikach.
Przy kolejkowanie samo z siebie jest tu zabezpieczeniem aniżeli np. wysyłanie właśnie dużej paczki spakowanych plików graficznych.
Crozin
7.04.2013, 11:26:21
@markonix: W pierwszym poście bardzo wyraźnie napisano, że chodzi o dużą ilość plików, których łączna waga może przekraczać kilka GiB.
coderek
7.04.2013, 13:58:12
Jeden plik nie może przekroczyć 150MB. Piki będą wysyłane po kolei, jeden, drugi, trzeci, itd. nie jednocześnie. Chodzi o to, że czas wywołania skryptu jest ograniczony i jeśli ktoś będzie wysyłał plik dość długo to może dojść do przerwania działania skryptu i przesyłania, dlatego chcę się skontaktowąć z firmą aby mieć pewnośc, że w php.ini będę mógł te parametry zmienić. No i też sprawa jak serwer/transfer będzie reagował jak np. przez kilka(naście?) godzin będę wysyłał kilka GB plików. Doczytałem się, że jest też coś takiego jak Timeline serwera Apache czyli serwer też może przerwać wykonywanie po jakimś czasie.
Crozin
7.04.2013, 14:15:41
Serwer HTTP czy samo PHP ma prawo zerwać połączenie po pewnym czasie - powinieneś upewnić się, że wszystko jest skonfigurowane w sposób zezwalający na istnienie długich żądań.
Warto również spojrzeć tutaj:
http://dnduploader.filkor.org/ (oczywiście, nie chodzi o D'n'D, a o sposób przesyłu pliku).
coderek
7.04.2013, 16:02:01
Działa ona wykorzystując HTML5 / JavaScript Blob
https://developer.mozilla.org/pl/docs/DOM/BlobTa biblioteka o której wspomniałem wcześniej też działa na tej zasadzie jeśli proglądarka to wspiera, jeśli nie wybiera metodę alternatywną.
Przykładowo plik 150MB na łączu gdzie upload jest 1Mbit trwa ~20min i niech kilkadziesiąt osób wysyła w tym samym czasie pliki do serwera.
Myślicie, że jakiś lepszy serwer nie będzie miał z tym problemu?
Crozin
7.04.2013, 20:15:48
Takie działanie osiągniesz przy pomocy JS (w nowszych przeglądarkach), Flashu czy aplecie Javy. Idealne rozwiązanie spróbowałoby skorzystać z każdej z tych technologii (w podanej kolejności) na samym końcu oferując najzwyklejszy formularz w czystym HTMLu.
150 x 1 Mb/s ≈ 19 MB/s. Przeciętne łącze i dysk serwerowy powinny bez problemu obsłużyć taki ruch. Serwer HTTP czy PHP nie będą tutaj problemem przy odpowiedniej konfiguracji.
coderek
8.04.2013, 11:00:36
Co do Mbit miałem na myśli prędkość: 0,125 MB/s
https://www.google.pl/search?q=1+mbps+in+KBpsChodzi oczywiście o upload od strony usera, bo na serwerze to łącze raczej będzie mocniejsze i zdąży odbierać pliki od usera.
Ps. Tak z ciekawości sprawdziłem jak w YouTube zrobiony jest upload. I u mnie (Firefox 20 leci korzystając właśnie z najnowszych ficzerów HTTP5/JS
artuross
8.04.2013, 11:09:15
Cytat(Crozin @ 7.04.2013, 07:43:50 )

Tutaj najistotniejsza jest możliwość wznawiania wysyłania plików. Wgranie kilku GiB danych może zająć bardzo dużo czasu - wyobraź sobie, że przy 90% nagle tracisz połączenie z internetem i kilka godzin wgrywania przepada.
https://www.google.com/search?q=file+upload...me&ie=UTF-8Dlatego wlasnie pliki sie kolejkuje i tnie na czesci, a uploaduje w malych czesciach, np. 50MB.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę
kliknij tutaj.