1

私はPHPとsimpletest単体テストを使用しています。Cookieを設定しようとするまで、テストは正常に機能します

try{
    setcookie($name,$cookie,$cookie_expires );
}catch Exception($e){
  blah
}

simpletestすでにヘッダー情報が書き出されているため、例外がスローされ、次のようになります。

予期しないPHPエラー[ヘッダー情報を変更できません-ヘッダーは既に送信されています(出力は/tests/simpletest/reporter.php:43で開始)]重大度[E_WARNING] in [blah_code.php line 280]

私はこれを捕まえることについて漠然とした説明を見てきました$this->expectException(new Exception());が、それ以上のドキュメントや例はありません。誰かが実用的な例を提供したり、ドキュメントを教えてもらえますか?明確にするために。これは、出力を生成する私のコードではなく、SimpleTestです。

4

2 に答える 2

1

before(ヘッダー関数)を出力すると、このエラーが発生しますsetcookie($name,$cookie,$cookie_expires );

の前にechosorまたはhtmlortextまたは何か(スペースさえも)がないことを確認してください 。<?phpsetcookie($name,$cookie,$cookie_expires );

于 2011-03-17T10:51:40.263 に答える
1

これを回避する1つの方法は、出力バッファリングを使用することです。

PHPの構成(および場合によっては.htaccess)でグローバルにオンにするか、ob_start()とそれに関連する関数(ob_get_clean()ob_end_flush()など)を使用できます。例えば:

ob_start();
// your SimpleTest here.
// your header/ cookie manipulation here.

その後:

ob_end_clean(); // Stop buffering and dump everything (don't echo).
ob_end_flush(); // Stop buffering and echo out the buffer.
ob_get_clean(); // Stop buffering and return everything as a string.

または他の関連機能のいずれか。そうしないと、 PHPはob_flush()ファイルの最後で呼び出すと思います。

于 2011-03-17T12:23:31.120 に答える