2011-08-17 36 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