Zend_Session: сеанс должен быть запущен до того, как любой вывод будет отправлен в браузер

Раньше я сталкивался с этой проблемой, но не могу вспомнить, как ее решить. Я создал простой (не могу получить более простой) контроллер и просто пытаюсь что-то повторить в браузере, и я получаю это сообщение:

Fatal error: Uncaught exception 'Zend_Session_Exception' with message 'Session must be started before any output has been sent to the browser ... 

Вот мой весь контроллер. Он отображает «успех», но также отображает сообщение об ошибке. Как я могу отключить это сообщение об ошибке, чтобы я мог просто что-то повторить в браузере?

 <?php class CacheController extends Zend_Controller_Action { public function clearAction() { $this->_helper->layout->disableLayout(); $this->_helper->viewRenderer->setNoRender(); try { $result = Model_Cache::emptyCache(array('foobar'=>1)); if ($result['status'] == true) { echo 'Success'; } else { echo 'Error: ' . $result['message']; } } catch (Exception $e) { echo 'Error: ' . $e->getMessage(); } } } 

Из памяти эта ошибка обычно возникает из-за того, что не-PHP-код запускает выход до предполагаемой (и инициализации сеанса). Обычно это происходит из-за пробелов или возврата каретки после ненужных ?> Тегов. Это первое, что я проверил.

Похоже, что ошибка звучит так: вы не начинаете Zend_Session перед отправкой данных в браузер. Обычно у меня есть что-то вроде того, что я вставлял ниже в моем бутстрапе, чтобы запустить Zend_Session.

 protected function _initSessions() { Zend_Session::start(); } 

Это должно заставить вас пойти в Zend Framework. Если вы используете этот инструмент вне рамки, просто используйте эту внутреннюю строку кода в верхней части ваших PHP-скриптов, прежде чем эхо или распечатать что-либо.

Надеюсь, это поможет!

Я нашел аналогичную запись по этой проблеме:

Выход PHPUnit, вызывающий исключения Zend_Session

У меня была та же проблема, но решение, которое было предложено в предыдущей ссылке, не сработало для меня, поэтому после некоторого тестирования я обнаружил, что есть переменная класса Zend_Session

  /** * Whether or not Zend_Session is being used with unit tests * * @internal * @var bool */ public static $_unitTestEnabled = false; 

Если вы установите для этой переменной значение «истина», выполнение phpunit работает без каких-либо проблем. По крайней мере, это то, что произошло в моем случае.

Надеюсь, что эта помощь

Я столкнулся с одной и той же проблемой, и моя проблема заключалась в том, что я повторял предупреждение STRICT, которое помещалось на экран.

Хорошим способом отладки этой проблемы является использование ob_start() и ob_get_contents();

Надеюсь, поможет

По какой-то причине я пытался установить некоторую переменную сеанса в файле index.php после того, как приложение завершило загрузку. Не уверен, почему это не вызвало проблемы раньше, но когда я удалил это из моего index.php , он сработал.

 $userSession = new Zend_Session_Namespace('Auth'); $userSession->forcePasswordChange = false; 

Возможно, сеанс запущен через application.ini или php.ini (автозапуск сеанса)? Если вы используете ide, попытайтесь найти «пробелы».

Иногда поиск "" (с пробелами) помогает.

У меня было такое же сообщение об ошибке. Но только для одного действия. Проблема была вызвана этими двумя строками в действии контроллера:

 $customersModel = new Default_Model_DbTable_Customers(); $this->view->customers = $customersModel->fetchAll(); 

В моей базе данных было более 6000 клиентов . Поэтому неплохо подталкивать много записей для просмотра.