Zend_Session: сессия должна быть запущена перед отправкой любого вывода в браузер - PullRequest
3 голосов
/ 14 октября 2010

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

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();
        }
    }
}

Ответы [ 7 ]

6 голосов
/ 14 октября 2010

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

4 голосов
/ 14 октября 2010

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

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

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

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

2 голосов
/ 12 декабря 2011

Я нашел похожий пост по этой проблеме:

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

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

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

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

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

1 голос
/ 12 марта 2012

Я столкнулся с той же проблемой, и моя проблема заключалась в том, что я выводил СТРОГО предупреждение, которое выводилось на экран.

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

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

1 голос
/ 14 октября 2010

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

$userSession = new Zend_Session_Namespace('Auth');
$userSession->forcePasswordChange = false;
0 голосов
/ 12 марта 2015

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

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

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

0 голосов
/ 14 октября 2010

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

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

...