Назад | Перейти на главную страницу

Пользователь, получающий частичные загрузки

Немного предыстории: я веду видео-сайт о стратегии игры в покер на основе подписки. Наши видеоролики имеют длину от 30 до 80 минут и размер от 20 МБ до 500 МБ. Сайт находится на общем сервере с hostmonster.com

У одного из моих пользователей проблемы с загрузкой некоторых больших видеофайлов. Он сообщает о проблемах с чем-либо размером более 100 МБ. По сути, он получает только часть файла, а это значит, что видео останавливается до конца. Он пробовал несколько компьютеров из разных мест. Он сообщает, что может успешно скачивать файлы размером 500 МБ с других сайтов.

В качестве браузера он использует Internet Explorer (версия неизвестна). Я посоветовал ему попробовать Firefox или Chrome, чтобы посмотреть, работают ли их менеджеры загрузок для него лучше, но пока я ничего не получил в ответ.

Он также сообщил, что его загрузки не сообщают о размерах файлов. Я вижу то же самое (размер файла не сообщается), но у меня не было проблем с самими загрузками.

Мы передаем загрузки через скрипт php, который проверяет данные для входа в систему и записывает загрузку в нашу базу данных перед возвратом файла. Я подозреваю, что именно поэтому не сообщается о размере файла.

Что еще я должен спросить у пользователя? Что еще он или я могли бы попробовать?

Проблема была окончательно решена, когда я начал изменять настройки конфигурации сервера при запросе ответов на вопрос StackOverflow ( https://stackoverflow.com/questions/2617190/php-file-serving-script-unreliable-downloads )

Изучив проблему с размером файла, я обнаружил, что размер задается в скрипте правильно, но это не отражается в заголовках, возвращаемых браузеру. Скорее, возвращались заголовки:

http://www.grinderschool.com/download_video_test.php?t=KillsAids021&format=wmv

GET /download_video_test.php?t=KillsAids021&format=wmv HTTP/1.1
Host: www.grinderschool.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3 (.NET CLR 3.5.30729)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Cookie: style_cookie=printonly; phpbb3_7c544_u=2; phpbb3_7c544_k=44b832912e5f887d; phpbb3_7c544_sid=e8852df42e08cc1b2250300c2897f78f; __utma=174624884.2719561324781918700.1251850714.1270986325.1270989003.575; __utmz=174624884.1264524375.411.12.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=low%20stakes%20poker%20videos; phpbb3_cmviy_k=; phpbb3_cmviy_u=2; phpbb3_cmviy_sid=d8df5c0943863004ca40ef9c392d371d; __utmb=174624884.4.10.1270989003; __utmc=174624884

HTTP/1.1 200 OK
Date: Sun, 11 Apr 2010 12:58:02 GMT
Server: Apache/2.2.14 (Unix) mod_ssl/2.2.14 OpenSSL/0.9.8l DAV/2 mod_auth_passthrough/2.1 FrontPage/5.0.2.2635
X-Powered-By: PHP/5.2.11
Content-Disposition: attachment; filename=KillsAids021.wmv
Vary: Accept-Encoding
Content-Encoding: gzip
Keep-Alive: timeout=10, max=30
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: video/x-ms-wmv

В конце концов выяснилось, что проблема заключалась в сжатии gzip, которое автоматически применялось моим веб-сервером для любого контента, сгенерированного php. Ниже приведены шаги, которые я предпринял, чтобы исправить это:

Во-первых, я установил новый php.ini для управления моей отдельной папкой на общем сервере. Затем я подтвердил, что мой файл php.ini был настроен с zlib.output_compression = Off Это не решило проблему.

Затем я посмотрел на конкретные настройки Apache. Поскольку это общий сервер, я не мог напрямую получить доступ ни к одному из файлов конфигурации Apache, но я мог контролировать, как я хочу обрабатывать свой сайт, создав файл .htaccess и добавив строку: SetEnvIfNoCase Request_URI \.php$ no-gzip dont-vary

С этой строкой ни один мой php не будет сжат. Это сработало. Обратной стороной этого решения является то, что оно приведет к увеличению размеров файлов и увеличению пропускной способности для страниц php на моем сайте. Приятным положительным моментом является то, что это снизит потребление ресурсов ЦП (что является единственным фактором нахождения на общем сервере, который до сих пор был ограничивающим фактором). В конце концов, это определенно долгожданное изменение!

Использование других браузеров или менеджеров загрузки не помогло. В конце концов, я попросил пользователя попробовать прямую загрузку, и это помогло. Очевидно, проблема где-то в нашем скрипте для хранения файлов на основе php.

Я отмечаю ответ на этот вопрос для ServerFault. Если я не могу понять проблему со скриптом, я могу снова опубликовать сообщение на StackOverflow.

Я предполагаю, что из-за крайне низкой видимости этой проблемы, это как-то связано с доступом в Интернет конкретного пользователя. Вы сказали нам, что пользователь пробовал это с нескольких компьютеров. Каков был результат этого теста? Работало ли с других машин?