Magento "Не удается отправить заголовки" с загружаемыми продуктами - PullRequest
0 голосов
/ 17 августа 2011

У меня есть магазин Magento, продающий очень большие (2 - 4 ГБ) загружаемые файлы. Всякий раз, когда кто-то загружает файл и пытается продолжить просмотр, пока файл продолжает загружаться, браузер останавливается до истечения времени ожидания, выдавая эту ошибку:

"Невозможно отправить заголовки; заголовки уже отправлены в /home/xyz/public_html/app/code/core/Mage/Downloadable/Helper/Download.php, строка 282"

Я проверил, и файл Download.php не содержит пустых мест, которые я вижу. Кроме того, это происходит только тогда, когда кто-то пытается продолжить просмотр во время загрузки в том же браузере. Открываем другой браузер и все гладко и быстро, поэтому, очевидно, Magento застревает с одним соединением с клиентом?

Еще один признак: пока идет загрузка, нажатие в любом месте на сайте просто останавливается, как упоминалось выше. Однако если в течение периода отсутствия доступа я отменяю загрузку файла, то новая страница загружается немедленно. Это означает, что отмена загрузки освобождает браузер для других подключений.

Окружающая среда:

Первоначально я работал на сервере с mod_fcgi и eaccelerator, но он продолжал истекать во время длительных загрузок, даже после игры со всеми настройками FCGI, которые я мог найти, поэтому теперь он работает с SuPHP.

Apache 2.2 / cPanel 11.30 / CentOS 5.5 / выделенный сервер 4 ГБ ОЗУ / Magento 1.4.2

Если это поможет, это веб-сайт: http://store.gmvbodybuilding.com

Я обещаю спасти котенка или посадить дерево и назвать его в честь того, кто бы это не понял!

:)

1 Ответ

0 голосов
/ 17 августа 2011

Если Magento использует обработчик сеанса PHP по умолчанию на основе файлов, остановка будет вызвана тем, что файл сеанса заблокирован скриптом загрузки.Вам нужно будет ввести явный session_write_close() в сценарии загрузки, ДО начала загрузки.Это освободит / разблокирует файл сеанса и позволит пользователю просматривать другие страницы сайта.В противном случае каждый запрос, поступающий во время загрузки, будет зависать от session_start (), который этот конкретный сценарий пытается установить для своей сессии на свою блокировку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...