Ten problem wydaje się być bezpośrednio związany z niesławnym limitem 2 GB i nie jestem pewien na tej liście, czy jest to 32-bitowy PHP. Widziałem komentarze dotyczące HTTP nie są zaprojektowane dla takich dużych plików. Jednak wolałbym raczej wyczerpać ten kierunek, zanim zdecyduję się na jakąkolwiek zasadniczą zmianę w stosunku do tego, co do tej pory okazało się skuteczne. Jak sugeruje tytuł, muszę przesłać> 2 GB plików, największy jak dotąd 3,8 GB. Mam formularz zbudowany przy użyciu przesyłania plików jQuery, który nie miał żadnych problemów z wysyłaniem żadnych plików (wszystkie mniej < 2 GB), dopóki te duże się nie zaczęły. Ładowanie 3.8 GB z dysku może zająć około 5 minut, a pasek postępu do 100%. Jednak zgłaszany błąd po przesłaniu to typ 1, który sugeruje, że przekroczono limit rozmiaru pliku.Przesyłanie plików HTTP 4 GB przy użyciu jQuery-File-Upload, Apache i PHP
Jeśli monitoruję wykorzystanie dysku na serwerze podczas przesyłania, będzie miał on następujące właściwości próbki: Przed przesłaniem dysk jest używany w 30%, ponieważ przesyłanie trwa to zwiększenie wykorzystania, 31%, 32% .... 45%, 46% itp. Jednak w okolicach punktu 2 GB wykorzystanie dysku spadło do 30%, podczas gdy przesyłanie plików przez klienta/przeglądarkę jest kontynuowane. Gdy użycie dysku przez serwery przestaje rosnąć, klient może być w 60% załadowany. Mimo to klient nadal kontynuuje działanie w 100%, ale serwer nie jest akceptowany, ponieważ status dysku nigdy nie spada o 30%.
Używam 64Bit Ubuntu (najnowszy) z Apache/2.2.22 (Ubuntu) i PHP w wersji 5.3.10-1ubuntu3.2 Po wielu dniach włączania i wyłączania w poszukiwaniu rozwiązania nadal nie mogę uzyskać 3.8 GB plik do przesłania po zmianie wielu ustawień. Podam listę zmian poniżej, ale na tym etapie myślę, że może to być 32-bitowy numer PHP, więc jeśli ktoś może zaproponować link, który warto podążać, lub rozwiązanie, które warto wypróbować, byłbym wdzięczny.
W Apache2 mam ustawić:
- apache2.conf I've set Timeout to 900
- httpd.conf I've set LimitRequestBody to 0
- .htaccess in the file upload directory I've set:
- LimitRequestBody to 4939212390
- php_value upload_max_filesize 4831838208
- php_value post_max_size 4939212390
w php.ini mam ustawić następujące:
- UPLOAD_MAX_FILESIZE 4831838208
- POST_MAX_SIZE 4939212390
- max_execution_time 120
- max_input_time 60
- memory_limit 128M
Jeżeli uruchomić następujące na serwerze to wydawać się PHP nie ma 32-bitowego wydania, ale nie jestem pewien na tym etapie.
php -r "echo PHP_INT_MAX;"
9223372036854775807
Jak już wspomniałem, wszelkie pomysły byłyby mile widziane.
UPDATE:
rozwiązali ten problem, więc dzięki @BogdanBurim dla sugerując powrót do podejścia Podstawy:
udało mi się wgrać 3,8 GB plików za pośrednictwem protokołu HTTP z następującymi ustawieniami:
W Apache2 mam ustawić:
- apache2.conf I've set Timeout to 900
- httpd.conf I've set LimitRequestBody to 0
- .htaccess in the file upload directory I've set:
- LimitRequestBody to 0
- php_value upload_max_filesize 0
- php_value post_max_size 4939212390
- .htaccess in the php temp directory (in my case its /tmp/) I've set:
- LimitRequestBody to 0
- php_value upload_max_filesize 0
- php_value post_max_size 4939212390
w PHP.ini mam ustawić:
- UPLOAD_MAX_FILESIZE 0
- POST_MAX_SIZE 4939212390
- max_execution_time 120
- max_input_time 60
- memory_limit 128M
Jedyną ważną częścią tego roztworu konieczności zdejmowania MAX_FILE_SIZE, HTML z formularza Dodano:
<input type="hidden" name="MAX_FILE_SIZE" value="4939212390" />
Mając to zestaw nieustannie wywołało PHP błąd typu 2, więc php nie mógł obsłużyć większej niż 32bit liczby całkowitej, która jest ustawiona. Usunięcie spowodowało błędy PHP typu 1, dopóki nie zmieniłem UPLOAD_MAX_FILESIZE na 0 wszędzie i hej presto to działa !!!!
http://php.net/manual/en/features.file-upload.errors.php
pokrewne: http://stackoverflow.com/questions/50 53290/duży plik-upload-choć-html-formularz-więcej niż-2-gb – valentinas
Spróbuj przesłać plik za pomocą prostego formularza HTML i . Czy się zepsuje? Być może zobaczysz dokładny komunikat o błędzie. –
Dzięki @BogdanBurim Spróbuję później i zaktualizuję – Diplonics