Posted 28 марта, 2024Mar 28 В приложении Загрузки выложены большие файлы, размером до 900мб. Раньше всё работало нормально, люди точно их скачивали. А сейчас стали жаловаться что файлы битые. Я проверил - файлы обрезаются на 500 МБ (524 935 361 байт). Движок был 4.7.15, обновление до 4.7.16 не помогло. В настройках вроде бы нигде нет лимита (да и было бы предупреждение, а не так что половина файла скачалась и обрыв). В логах в админке никаких событий в это время не было. В админке изучил отчёт phpinfo - нигде никаких лимитов в районе 500 МБ там нет. Выключил в настройках антилич-защиту - не помогло. Через Download Master в многопоточном режиме файл качается нормально. Урезал настройки Download Master для однопоточного скачивания - через 500 МБ - Socket disconnected. Куда копать?
28 марта, 2024Mar 28 Author 37 минут назад, Zero108 сказал: Что там с таймаутами у веб-сервера? Где их смотреть? Виртуальный хостинг, cPanel, LiteSpeed. Но врядли в таймаутах дело, канал до сервера медленный, скорость в разное время - весьма разная, но во всех опытах файл обрезается чётко на 500мб. При зажатии скорости в файлокачалке - эти 500мб качает соответственно в несколько раз дольше, но так же упирается именно в 500мб (потом - обрыв и начинает докачку). Взаимосвязи со временем явно нет, взаимосвязь только с размером.
28 марта, 2024Mar 28 Хостеру напиши. Вероятно, поставили лимит, чтобы пользователи оперативу не потребляли сверх нормы. Попробуй сделать тестовый файл больше 500 мегабайт - zip, положи его в корень сайта и попробуй скачать в браузере, минуя скрипты сайта, то есть напрямую.
28 марта, 2024Mar 28 Author 3 часа назад, Zero108 сказал: Хостеру напиши. Пока ничего внятного не ответили, сказали типа поднимите post_max_size upload_max_filesize - но у меня там было 192M, а файл режется на 500M. Написал в этих опциях 900M, через phpinfo() вижу что 900M установлено. Но итог прежний. Из IPS файлы обрезаются на 500мб. 3 часа назад, Zero108 сказал: Попробуй сделать тестовый файл больше 500 мегабайт - zip, положи его в корень сайта и попробуй скачать в браузере, А так файлы более 500мб нормально скачиваются. Значит виноват либо php либо баг в IPS последних версий... И что делать дальше?
29 марта, 2024Mar 29 У тебя в приложении Загрузки (Downloads) эти проблемные файлы загружены в базу данных или добавлены по прямым ссылкам? Если по ссылкам, куда ведут эти ссылки: на твой сервер или в облачное хранилище?
29 марта, 2024Mar 29 Author Стало понятно что дело не в IPS. Через php-скрипты не отдаются файлы более 500мб. Даже в Wordpress плагины для файлового архива, тоже отдающие файлы через php, в итоге на 500мб обрезают отдачу файла. Весь гугл заспамлен проблемой аплоада файлов через php, но с аплоадом у меня всё нормально. В тот же IPS я спокойно заливаю файл на 800мб, он на диске виден что 800, а скачать обратно через php - режется на 500. Какой-то лимит у хостера, ищут проблему.
29 марта, 2024Mar 29 Так вы базу данных закачиваете эти файлы? Я больше 100 мегабайт в базу данных не закачиваю. Файлы до 3 ГБ скачиваются по ссылкам с диска.
29 марта, 2024Mar 29 Author 14 минут назад, Zero108 сказал: Так вы базу данных закачиваете эти файлы? Не в базу, всё на диске лежит. IPS модуль Загрузки кажется вообще давно разучился закачивать файлы в базу, только на диск. Где у него такая настройка? 38 минут назад, Zero108 сказал: Файлы до 3 ГБ скачиваются по ссылкам с диска. А как это сделать? Вроде всё в админке облазил - не нашёл. Опция анти-лич (Сообщество - ЗАГРУЗКИ - Настройки - Основные настройки) не влияет никак. Из каталога загрузок файлы в любом случае отдаётся php-скриптом, прямой ссылки на файл пользователю не показывается.
29 марта, 2024Mar 29 32 минуты назад, f2065 сказал: А как это сделать? У меня для скачивания по URL используются абсолютные ссылки. Не помню, можно ли использовать относительные.
29 марта, 2024Mar 29 Если я правильно помню, когда вы загружаете вот сюда, то ваши файлы хранятся в базе данных, а не в виде файлов файловой системы вашего сайта. Edited 29 марта, 2024Mar 29 by Zero108
29 марта, 2024Mar 29 Author Не, файлы в файловой системе. Это задаётся в разделе Система - Обзор - Файлы - Настройки хранения. Там у меня всех хранений созданы конфигурации в папках файловой системы, SQL нигде не используется. Вобщем файлы сейчас физически лежат в файловой системе (правда имена у них хэшированые). Но модуль Загрузки их отдаёт только через php (видимо для детального учёта статистики). Вопрос в том как бы заставить IPS Загрузки отдавать файлы напрямую, не прогоняя через php. Перезагружать всё и прописывать URL - это не выход, хотелось бы как-то глобально в админке. Да и хэширование имён тоже препятствует простому созданию ссылок.
29 марта, 2024Mar 29 Поменять систему загрузки для downloads. Если у вас nginx, то отдавать с заголовком X-Accel-Redirect.
29 марта, 2024Mar 29 У меня так было сделано одно время, на 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 марта, 2024Mar 29 by Desti
29 марта, 2024Mar 29 Если хочется отдавать контент по типу, то заменить вторую строку на header('Content-Type: '.\IPS\File::getMimeType( $file->originalFilename ));
29 марта, 2024Mar 29 Desti так в чем проблема то отдавать через движок? Что мешает в данном случае? Вот городить костыли не хочется, если честно. Забыть легко потом после обновления.
29 марта, 2024Mar 29 Author Решение проблемы - техподдержка хостера увеличила следующие параметры веб-сервера LiteSpeed maxReqBodySize: 500M -> 1024M maxDynRespSize: 500M -> 1024M И тогда php нормально отдаёт файлы более 500мб...
29 марта, 2024Mar 29 3 часа назад, Zero108 сказал: так в чем проблема то отдавать через движок? Что мешает в данном случае? Вот городить костыли не хочется, если честно. Забыть легко потом после обновления Не хочется - не городите, какая проблема. 8 часов назад, f2065 сказал: Вопрос в том как бы заставить IPS Загрузки отдавать файлы напрямую, не прогоняя через php. Это был ответ на вопрос.
29 марта, 2024Mar 29 1 час назад, f2065 сказал: параметры веб-сервера LiteSpeed Этим софтом мало кто пользуется, но за инфу спасибо.
29 марта, 2024Mar 29 1 час назад, f2065 сказал: maxReqBodySize Ну, собственно, вот аналогичный случай. Издержки дешевых хостингов. https://wordpress.org/support/topic/large-digital-file-downloads-ending-early-at-500mb/ Edited 29 марта, 2024Mar 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.