一些背景:我运行一个基于订阅的扑克策略video网站。 我们的video长度从30分钟到80分钟不等,大小从20MB到500MB不等。 该网站与hostmonster.com共享服务器
我的一个用户在下载一些较大的video文件时遇到问题。 他报告超过100MB的任何问题。 基本上,他只是获得文件的一部分,这意味着video在结束之前停止。 他从多个地点尝试了多台电脑。 他报告说,他能够成功地从其他网站下载500MB的文件。
他正在使用Internet Explorer(版本未知)作为他的浏览器。 我曾经build议他尝试使用Firefox或Chrome浏览器,看他们的下载pipe理员是否能为他工作,但至今我还没有听到任何回应。
他还报告说,他的下载不报告任何文件大小。 我看到相同的东西(没有文件大小报告),但我没有遇到任何问题,下载本身。
我们通过一个PHP脚本下载,validationlogin信息,并logging下载到我们的数据库,然后再返回文件。 我怀疑这是为什么没有文件大小的报告。
还有什么我该问用户? 他或我可以尝试其他什么?
当我开始更改服务器configuration的设置时,问题终于得到解决,在响应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
最后,事实certificate,问题是gzip压缩,这是自动应用我的networking服务器的任何PHP生成的内容。 以下是我采取的纠正措施:
首先,我build立了一个新的php.ini来控制共享服务器上的个人文件夹。 然后我确认我的php.ini文件是使用zlib.output_compression = Off
configuration的。这并没有解决这个问题。
接下来我看了一下Apache的具体设置。 由于是共享服务器,我无法直接访问任何Apacheconfiguration文件,但是我可以通过创build一个.htaccess文件并添加以下行来控制我希望如何处理我的网站: SetEnvIfNoCase Request_URI \.php$ no-gzip dont-vary
有了这一行,我的PHP都不会被压缩。 那就是诀窍。 这个解决scheme的缺点是,它会导致我的网站上的PHP页面的文件大小和带宽使用量更大。 值得欢迎的是,它将减less我们的CPU消耗(这是迄今为止限制因素的共享服务器上的唯一因素)。 最后,这绝对是一个可喜的变化!
由于这个问题的performance极其低下,我认为这与特定用户的互联网接入有关。 你告诉我们,用户在多台电脑上试过。 那个testing的结果是什么? 它从其他机器工作?
尝试其他浏览器或下载pipe理器不起作用。 最后,我有用户尝试直接下载,并做了伎俩。 所以显然这个问题是在我们基于PHP的文件服务脚本的某个地方。
我正在为ServerFault回答这个问题。 如果我不能找出脚本的问题,那么我可以在StackOverflow上重新发布。