@criminalist

PHP проблема при заливке файлов размеров более 2GB?

Здравствуйте, столкнулся с проблемой при загрузке на сервер файлов более 2GB, при помощи PHP и формы.

Первый момент очень долго идет загрузка, например файл загружается за 5 минут, но после полной загрузке пропадает из папки /tmp и видимо копируется уже в директорию сайта, вот почему то этот процесс очень долгий и на нем происходит обрыв по всей видимости.
В логах сыпет ошибки "child 5344 exited on signal 15 (SIGTERM) after 1290.834798 seconds from start"
С настройками игрался не особо помогает, плюс минус по размеру и времени и все равно отваливается.

В PHP.INI настройки по объему загружаемых файлов выставлены с запасом на 16 GB.

В NGINX настройки
sendfile on;
keepalive_timeout 30;
keepalive_requests 100;
tcp_nopush on;
tcp_nodelay on;
server_tokens off;
directio 10m;
reset_timedout_connection on;

client_max_body_size 6G;
client_body_buffer_size 128m;

open_file_cache max=200000 inactive=20s;
open_file_cache_valid 30s;
open_file_cache_min_uses 2;
open_file_cache_errors on;

Пробывал создать tmp в оперативной памяти (tmpfs) ситуация в корне меняется и файлы полностью заливаются на сервер, но очень долго!

Что происходит с файлом после его загрузки в папку /tmp, почему висит php-fpm, как отловить и решить эту проблему?

Если не предоставил каких то данных просто напишите и я выложу то что требуется.
Забыл добавить, еще идет подсчет sha1 хеша файла, хотя опцию отключал ситуация не поменялась.
  • Вопрос задан
  • 112 просмотров
Пригласить эксперта
Ответы на вопрос 3
@karminski
Senior React.JS Developer
А вы что в один поток файл загружаете? Используйте загрузку файла частями. Как пример (но не панацея) - https://blueimp.github.io/jQuery-File-Upload/.
Ответ написан
@rPman
2гб - выглядит так будто попали в лимит 32-битной адресации (т.е. размер файла в signed int), в php целые числа при превышении 2^31 преобразуются в double, со всеми вытекающими от сюда глюками.

попробуйте 64-битную реализацию на тестовом железе, если я прав.
Ответ написан
akubintsev
@akubintsev
Опытный backend разработчик
В nginx надо попробовать выключить буферизацию тела запроса
fastcgi_request_buffering off
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы