Раньше я сталкивался с этой проблемой, но не могу вспомнить, как ее решить. Я создал простой (не могу получить более простой) контроллер и просто пытаюсь что-то повторить в браузере, и я получаю это сообщение:
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 клиентов . Поэтому неплохо подталкивать много записей для просмотра.