Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Upload dużej ilości plików, czy PHP da radę?
Forum PHP.pl > Forum > PHP
coderek
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
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
Jak ten tool Plupload ma się do tego o co ja pytałem?questionmark.gif
markonix
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
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
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
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
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
@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
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
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
Działa ona wykorzystując HTML5 / JavaScript Blob https://developer.mozilla.org/pl/docs/DOM/Blob
Ta 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
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
Co do Mbit miałem na myśli prędkość: 0,125 MB/s

https://www.google.pl/search?q=1+mbps+in+KBps

Chodzi 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
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-8


Dlatego 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.
Invision Power Board © 2001-2025 Invision Power Services, Inc.