Posted 28 мартаMar 28 comment_201858 В приложении Загрузки выложены большие файлы, размером до 900мб. Раньше всё работало нормально, люди точно их скачивали. А сейчас стали жаловаться что файлы битые. Я проверил - файлы обрезаются на 500 МБ (524 935 361 байт). Движок был 4.7.15, обновление до 4.7.16 не помогло. В настройках вроде бы нигде нет лимита (да и было бы предупреждение, а не так что половина файла скачалась и обрыв). В логах в админке никаких событий в это время не было. В админке изучил отчёт phpinfo - нигде никаких лимитов в районе 500 МБ там нет. Выключил в настройках антилич-защиту - не помогло. Через Download Master в многопоточном режиме файл качается нормально. Урезал настройки Download Master для однопоточного скачивания - через 500 МБ - Socket disconnected. Куда копать?
28 мартаMar 28 Author comment_201860 37 минут назад, Zero108 сказал: Что там с таймаутами у веб-сервера? Где их смотреть? Виртуальный хостинг, cPanel, LiteSpeed. Но врядли в таймаутах дело, канал до сервера медленный, скорость в разное время - весьма разная, но во всех опытах файл обрезается чётко на 500мб. При зажатии скорости в файлокачалке - эти 500мб качает соответственно в несколько раз дольше, но так же упирается именно в 500мб (потом - обрыв и начинает докачку). Взаимосвязи со временем явно нет, взаимосвязь только с размером.
28 мартаMar 28 comment_201861 Хостеру напиши. Вероятно, поставили лимит, чтобы пользователи оперативу не потребляли сверх нормы. Попробуй сделать тестовый файл больше 500 мегабайт - zip, положи его в корень сайта и попробуй скачать в браузере, минуя скрипты сайта, то есть напрямую.
28 мартаMar 28 Author comment_201862 3 часа назад, Zero108 сказал: Хостеру напиши. Пока ничего внятного не ответили, сказали типа поднимите post_max_size upload_max_filesize - но у меня там было 192M, а файл режется на 500M. Написал в этих опциях 900M, через phpinfo() вижу что 900M установлено. Но итог прежний. Из IPS файлы обрезаются на 500мб. 3 часа назад, Zero108 сказал: Попробуй сделать тестовый файл больше 500 мегабайт - zip, положи его в корень сайта и попробуй скачать в браузере, А так файлы более 500мб нормально скачиваются. Значит виноват либо php либо баг в IPS последних версий... И что делать дальше?
29 мартаMar 29 comment_201871 У тебя в приложении Загрузки (Downloads) эти проблемные файлы загружены в базу данных или добавлены по прямым ссылкам? Если по ссылкам, куда ведут эти ссылки: на твой сервер или в облачное хранилище?
29 мартаMar 29 Author comment_201873 Стало понятно что дело не в IPS. Через php-скрипты не отдаются файлы более 500мб. Даже в Wordpress плагины для файлового архива, тоже отдающие файлы через php, в итоге на 500мб обрезают отдачу файла. Весь гугл заспамлен проблемой аплоада файлов через php, но с аплоадом у меня всё нормально. В тот же IPS я спокойно заливаю файл на 800мб, он на диске виден что 800, а скачать обратно через php - режется на 500. Какой-то лимит у хостера, ищут проблему.
29 мартаMar 29 comment_201874 Так вы базу данных закачиваете эти файлы? Я больше 100 мегабайт в базу данных не закачиваю. Файлы до 3 ГБ скачиваются по ссылкам с диска.
29 мартаMar 29 Author comment_201876 14 минут назад, Zero108 сказал: Так вы базу данных закачиваете эти файлы? Не в базу, всё на диске лежит. IPS модуль Загрузки кажется вообще давно разучился закачивать файлы в базу, только на диск. Где у него такая настройка? 38 минут назад, Zero108 сказал: Файлы до 3 ГБ скачиваются по ссылкам с диска. А как это сделать? Вроде всё в админке облазил - не нашёл. Опция анти-лич (Сообщество - ЗАГРУЗКИ - Настройки - Основные настройки) не влияет никак. Из каталога загрузок файлы в любом случае отдаётся php-скриптом, прямой ссылки на файл пользователю не показывается.
29 мартаMar 29 comment_201877 32 минуты назад, f2065 сказал: А как это сделать? У меня для скачивания по URL используются абсолютные ссылки. Не помню, можно ли использовать относительные.
29 мартаMar 29 comment_201878 Если я правильно помню, когда вы загружаете вот сюда, то ваши файлы хранятся в базе данных, а не в виде файлов файловой системы вашего сайта. Edited 29 мартаMar 29 by Zero108
29 мартаMar 29 Author comment_201879 Не, файлы в файловой системе. Это задаётся в разделе Система - Обзор - Файлы - Настройки хранения. Там у меня всех хранений созданы конфигурации в папках файловой системы, SQL нигде не используется. Вобщем файлы сейчас физически лежат в файловой системе (правда имена у них хэшированые). Но модуль Загрузки их отдаёт только через php (видимо для детального учёта статистики). Вопрос в том как бы заставить IPS Загрузки отдавать файлы напрямую, не прогоняя через php. Перезагружать всё и прописывать URL - это не выход, хотелось бы как-то глобально в админке. Да и хэширование имён тоже препятствует простому созданию ссылок.
29 мартаMar 29 comment_201884 Поменять систему загрузки для downloads. Если у вас nginx, то отдавать с заголовком X-Accel-Redirect.
29 мартаMar 29 comment_201886 У меня так было сделано одно время, на 3.х В server{} nginx создаем location /uploads { root /home/user/; internal; } root указывает на корневую директорию форума. Рестартуем nginx. в app../downloads/modules/front/downloads/view.php перед /* Print the file, honoring ranges */ вставляем header("X-Accel-Redirect: /uploads/" . $file->container.'/'.$file->filename;); header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename=' . $file->originalFilename); exit; После этого файлы будет отдавать nginx, а не движок форума. Edited 29 мартаMar 29 by Desti
29 мартаMar 29 comment_201887 Если хочется отдавать контент по типу, то заменить вторую строку на header('Content-Type: '.\IPS\File::getMimeType( $file->originalFilename ));
29 мартаMar 29 comment_201888 Desti так в чем проблема то отдавать через движок? Что мешает в данном случае? Вот городить костыли не хочется, если честно. Забыть легко потом после обновления.
29 мартаMar 29 Author comment_201899 Решение проблемы - техподдержка хостера увеличила следующие параметры веб-сервера LiteSpeed maxReqBodySize: 500M -> 1024M maxDynRespSize: 500M -> 1024M И тогда php нормально отдаёт файлы более 500мб...
29 мартаMar 29 comment_201900 3 часа назад, Zero108 сказал: так в чем проблема то отдавать через движок? Что мешает в данном случае? Вот городить костыли не хочется, если честно. Забыть легко потом после обновления Не хочется - не городите, какая проблема. 8 часов назад, f2065 сказал: Вопрос в том как бы заставить IPS Загрузки отдавать файлы напрямую, не прогоняя через php. Это был ответ на вопрос.
29 мартаMar 29 comment_201903 1 час назад, f2065 сказал: параметры веб-сервера LiteSpeed Этим софтом мало кто пользуется, но за инфу спасибо.
29 мартаMar 29 comment_201904 1 час назад, f2065 сказал: maxReqBodySize Ну, собственно, вот аналогичный случай. Издержки дешевых хостингов. https://wordpress.org/support/topic/large-digital-file-downloads-ending-early-at-500mb/ Edited 29 мартаMar 29 by Zero108
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.