PHP проблема при заливке файлов размеров более 2GB?
Здравствуйте, столкнулся с проблемой при загрузке на сервер файлов более 2GB, при помощи PHP и формы.
Первый момент очень долго идет загрузка, например файл загружается за 5 минут, но после полной загрузке пропадает из папки /tmp и видимо копируется уже в директорию сайта, вот почему то этот процесс очень долгий и на нем происходит обрыв по всей видимости.
В логах сыпет ошибки "child 5344 exited on signal 15 (SIGTERM) after 1290.834798 seconds from start"
С настройками игрался не особо помогает, плюс минус по размеру и времени и все равно отваливается.
В PHP.INI настройки по объему загружаемых файлов выставлены с запасом на 16 GB.
Пробывал создать tmp в оперативной памяти (tmpfs) ситуация в корне меняется и файлы полностью заливаются на сервер, но очень долго!
Что происходит с файлом после его загрузки в папку /tmp, почему висит php-fpm, как отловить и решить эту проблему?
Если не предоставил каких то данных просто напишите и я выложу то что требуется.
Забыл добавить, еще идет подсчет sha1 хеша файла, хотя опцию отключал ситуация не поменялась.
Дело в том что для загрузки используется готовое решение, некий модуль, поэтому переписывать не очень что то хочется, железо свое оперативки 74 gb, пока пытаюсь решить именно настройками железа.
2гб - выглядит так будто попали в лимит 32-битной адресации (т.е. размер файла в signed int), в php целые числа при превышении 2^31 преобразуются в double, со всеми вытекающими от сюда глюками.
попробуйте 64-битную реализацию на тестовом железе, если я прав.
Я ведь написал что если создать временную папку TPMFS то файл загружается хоть 4GB, но по времени занимает порядка 25 минут, и в основном это внутренний процесс (мне не понятно какой именно), сам файл на сервер залетает быстро, не больше минуты, далее начинает просто висеть и не понятно что делать.
вот именно, файл заливает внутренний процесс php у которого нет проблем с 32 int, а вот фреймворк, написанный на php который в дальнейшем обрабатывает файл, вполне может содержать эту ошибку использования
я предлагаю вам просто проверить мою теорию, подняв сервер в 64-битном тестовом окружении, это явно проще чем разбираться в исходниках