4

我以前遇到过这个问题,但我不记得如何解决它。我已经创建了一个简单的骨架(不能再简单了)控制器,我只是想向浏览器回显一些东西,我收到了这条消息:

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

7 回答 7

8

从内存来看,这个错误通常是由于非 PHP 代码在预期(和会话初始化)之前开始输出。?>通常是由于不必要的标签后面的空格或回车。这是我要检查的第一件事。

于 2010-10-13T22:55:54.087 回答
5

错误听起来像是在说您没有在将数据发送到浏览器之前启动 Zend_Session。通常,我在引导程序中粘贴了类似下面的内容来启动 Zend_Session。

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

这应该让您进入 Zend 框架。如果您在框架外使用此工具,只需在回显或打印任何内容之前,使用 PHP 脚本顶部附近的内部代码行。

希望有帮助!

于 2010-10-13T23:54:24.990 回答
2

我在这个问题上找到了类似的帖子:

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 执行将毫无问题。至少我的情况是这样。

希望这有帮助

于 2011-12-12T18:28:19.637 回答
1

出于某种原因,我试图index.php在应用程序完成引导后在我的文件中设置一些会话变量。不知道为什么这之前没有引起问题,但是当我从我的 . 中删除它时index.php,它起作用了。

$userSession = new Zend_Session_Namespace('Auth');
$userSession->forcePasswordChange = false;
于 2010-10-14T17:06:38.553 回答
1

我遇到了同样的问题,我的问题是我正在回显一个被放到屏幕上的 STRICT 警告。

调试此问题的一个好方法是使用ob_start()ob_get_contents();

希望能帮助到你

于 2012-03-12T00:10:01.547 回答
0

会话可能是通过您的 application.ini 或 php.ini (会话自动启动) 启动的吗?如果您使用 ide 尝试搜索“空格”。

有时搜索“”(带空格)会有所帮助。

于 2010-10-14T05:59:25.280 回答
0

我有同样的错误信息。但仅限于一个动作。问题是由控制器操作中的这两行引起的:

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

在我的数据库中有 6000 多个客户。所以推送很多记录查看是不好的。

于 2015-03-12T09:09:27.297 回答