2010-10-13 1 views
3

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

ответ

1

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

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

Пытаясь использовать сеанс, необходимо запустить Zend_Session с кодом, указанным выше. Я думал, что вы специально использовали сеанс. Но если нет, то удаление, как вы сказали здесь, так же эффективно. – gokujou

6

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

+1

Да! У меня была новая строка перед «

4

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

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

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

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

0

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

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

2

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

PHPUnit output causing Zend_Session exceptions

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

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

Если вы установите эту переменную в «истина» исполнение PHPUnit работает без каких-либо р РОБЛЕМА. По крайней мере, это то, что произошло в моем случае.

Надеется, что это поможет

1

я столкнулся с тем же проблемой, и моя проблема в том, что я вторя Строгое предупреждение, что в настоящее время ставится на экран.

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

Надеется, что это помогает

0

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

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

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

Смежные вопросы