2011-08-17 28 views
0

我有一个销售非常大(2 - 4 GB)可下载文件的Magento商店。每当有人正在下载一个文件,如果他们试图继续浏览而文件继续下载,浏览器的摊位,直到超时,引发此错误:Magento“无法发送标题”与可下载的产品

"Cannot send headers; headers already sent in /home/xyz/public_html/app/code/core/Mage/Downloadable/Helper/Download.php, line 282"

我已经检查和的download.php文件不包含我可以看到的空白空间。此外,只有当有人在同一浏览器中下载期间尝试继续浏览时才会发生此情况。打开另一个浏览器,一切都很顺利,很快,所以显然Magento与客户端的单一连接卡住了?

另一个症状:在下载过程中,如上所述,单击站点上的任何其他位置都会停止。但是,如果在不在任何地方的时间段内取消文件下载,则立即加载新页面。意味着取消下载以某种方式释放浏览器以用于其他连接。

环境:

我本来运行与mod_fcgi和eAccelerator在服务器,但它一直在漫长的下载超时,即使所有的FCGI设置我能找到打之后,所以它现在与SuPHP运行。

的Apache 2.2/11.30的cPanel/CentOS的5.5 /专用服务器4 GB RAM/Magento的1.4.2

如果有帮助,这是网站:http://store.gmvbodybuilding.com

我答应救只猫或植物树,并在任何人帮助解决这个问题后命名它们!

:)

回答

0

如果Magento的使用默认的基于文件的PHP会话处理程序,摊主就会因会话文件被下载脚本被锁定。在下载开始之前,您需要在下载脚本中发出明确的session_write_close()。这将释放/解锁会话文件并允许用户浏览网站上的其他页面。否则,正在进行下载的每个请求都会挂在session_start()上,该特定脚本试图在会话文件上获取自己的锁定。

+0

Ahhhhhhhhh我觉得这会导致一个解决方案!虽然你的建议比我的头高一点。首先,你是否建议切换到DB会话而不是基于离线的? – Hector

+0

好的我已经做了一些研究,我相信我应该留在基于文件的会话中。 (顺便说一句,我想发布一些代码在这个评论框,但不是太成功) – Hector

+0

你可以请建议在哪里添加代码,你好推荐?这是Download.php中的Magento代码,我相信它会启动下载。 '公共功能输出() { $ handle = $ this - > _ getHandle();如果($ this - > _ linkType == self :: LINK_TYPE_FILE){ while($ buffer = $ handle-> streamRead()){ print $ buffer; ($ feof($ handle)){ print fgets($ handle,1024); } } }' – Hector