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 Framework に取り掛かることができます。このツールをフレームワークの外で使用している場合は、何かをエコーまたは出力する前に、PHP スクリプトの上部近くにあるコードの内側の行を使用してください。

それが役立つことを願っています!

于 2010-10-13T23:54:24.990 に答える
2

私はこの問題について同様の投稿を見つけました:

Zend_Session例外を引き起こすPHPUnit出力

同じ問題が発生しましたが、前のリンクで提案された解決策が機能しなかったため、いくつかのテストの結果、クラス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

私は同じ問題に遭遇しました.私の問題は、画面に表示されている厳密な警告をエコーし​​ていたことです。

これをデバッグする良い方法は、使用ob_start()ob_get_contents();

それが役に立てば幸い

于 2012-03-12T00:10:01.547 に答える
1

何らかの理由でindex.php、アプリケーションのブートストラップが完了した後で、ファイルにセッション変数を設定しようとしました。これが以前に問題を引き起こさなかった理由はわかりませんが、これを から削除するindex.phpと機能しました。

$userSession = new Zend_Session_Namespace('Auth');
$userSession->forcePasswordChange = false;
于 2010-10-14T17:06:38.553 に答える
0

application.ini または php.ini (セッションの自動開始) を介してセッションが開始される可能性がありますか? IDE を使用する場合は、「スペース」を検索してみてください。

" " (スペースを含む) を検索すると役立つ場合があります。

于 2010-10-14T05:59:25.280 に答える