2010-08-25 33 views
5

Próbuję znaleźć jakieś oprogramowanie, które pomoże mi przesłać naprawdę duże pliki (> 200mb). Chcę tylko przesłać pojedynczy plik, bez wielu opcji. Chciałbym też, jeśli to możliwe, prosty pasek postępu.Przesyłanie plików dużych plików PHP/AJAX

Natknąłem się na http://pixeline.be/experiments/jqUploader/, co jest dosłownie tym, czego potrzebuję, ale ma limit 100 Mb na plik, ponieważ używa Flash.

Czy ktoś wie o czymś podobnym do tego, ale może obsługiwać większe pliki?

thx

Odpowiedz

1

Innym popularnym rozwiązaniem jest http://www.swfupload.org/, ale myślę, że może cierpieć z limitem 100MB.

Odnośnie całego problemu dużych rozmiarów plików, z moich badań wynika, że ​​aby przesłać duże pliki, nie ma innej możliwości niż zwiększenie wartości upload_max_filesize, post_max_size i max_execution time. Zastanawiam się, jaki wpływ na bezpieczeństwo ma ustawienie post_max_size, powiedzmy, 500M? Nie chodzi o kwestię przepustowości, która mnie dotyczy - to możliwe ataki DoS, które mogą wyniknąć z umożliwienia intruzom wysyłania losowych żądań 500M POST na serwer. Najlepszym sposobem obejścia tego problemu jest wysłanie przesłanych plików na inny serwer.

Istnieje duża dyskusja na temat całej sprawy tutaj:

http://aaronwinborn.com/blogs/aaron/how-handle-large-file-uploads

Jeśli jakieś hakerzy Apache tam może rzucić jakieś światło na konsekwencje bezpieczeństwa posiadające bardzo dużą wartość dla post_max_size że byłoby świetnie .

+1

Sam Apache nie dba o to, jak duże są pliki, modulo takie jak 31/32bit (2.1/4.2gig). Ale jeśli masz bardzo duży limit postów, możliwe jest powiązanie wszystkich dostępnych dzieci w puli połączeń z długotrwałymi ładowaniami i DOS-em maszyny (jak również przestrzenią dyskową układu wydechowego). Jest to trudniejsze w przypadku mniejszych limitów, ponieważ przesyłanie zakończy się szybciej, a połączenia będą ponownie uruchamiane szybciej. Oczywiście, możesz po prostu całkowicie zatrzasnąć serwer z próbami połączeń. –

+0

max_execution_time wpływa tylko na czas wykonania samego skryptu. Dlatego nie ma wpływu na czas potrzebny na przesłanie pliku. Musisz znacznie zwiększyć ** max_input_time **. Określa maksymalny czas, w ciągu którego skrypt może odbierać dane wejściowe (w tym sam plik do przesłania). Domyślna wartość to 60 sekund. – Jakar

+0

Zatem, ** max_input_time ** powinno wynosić co najmniej 1500, jeśli maksymalny rozmiar pliku wynosi 500 MB. ** Dlaczego? ** Ponieważ średnia prędkość wysyłania wynosi około 500 kb/s. Lub 1 MB co 2 sekundy. 500 (MB) * 2 sekundy = 1000 sekund. Niektórzy użytkownicy mogą mieć wolniejszy Internet lub wykorzystują część swojej przepustowości do innych zadań, więc poduszka o wartości 500 lub więcej byłaby dobra. http://us2.php.net/manual/en/features.file-upload.common-pitfalls.php – Jakar

0
+0

Thx za to :). Od tego czasu (i innych podobnych narzędzi) po prostu używa html 'file' input type do renderowania i przesyłania plików. Czy uważasz, że konieczność zmiany limitów wysyłania php spowodowałaby luki w zabezpieczeniach? –

+0

Oczywiście. Ktoś może łatwo zjadać twoją przepustowość. Ale twoje rozważania dziury bezpieczeństwa teraz przed rozwinięciem, które jest dobre. Możesz więc zrobić najlepiej, aby wypełnić te dziury wcześniej niż później. –

1

Polecam zaimplementować program przesyłający Java, taki jak JumpLoader i zintegrować go z bieżącym systemem. Posiada rozbudowane API, a jego interfejs JScript jest również łatwo dostępny. Można, tak jak ja, kod twojej stronie obsługi serwera i uczynić ją zdolną do:

  1. Multiple plik przesyłania
  2. przesyłaniem bez żadnych limitów rozmiar pliku - Jestem obecnie zmaga się z limitem 2G PHP na fopen(), ale spodziewam się rozwiązać szybko
  3. PARTITIONED przesyłanie - plik zostanie przesłany w kawałki
  4. integralność
  5. biegów - JumpLoader można również obliczyć i wysłać sum kontrolnych MD5 dla każdej partycji i całego samego pliku, który można potwierdzić na stronie serwera, aby zobaczyć, czy paczka dotarła ok, czy nie.

Mam nadzieję, że to pomaga.