3

私のアプリケーションでは、そのような「意図しない」空白などがないことを確認できます。コントローラーまたはモデルで「エコー」を実行しませんが、ログ ファイルには常に「ヘッダーが既に送信されました」というエラーが表示されます (ブラウザには何も表示されません)。php の終了タグもありません。唯一の「疑わしい」ことは、モデルとコントローラーの両方でセッションと入力ライブラリをロードすることです。

これは実際には大きな問題ではありませんが、CLI リクエストを使用するとエラーがひどくなります。

しばらく閲覧した後、スタック オーバーフローでこの回答を見つけました : https://stackoverflow.com/a/13783368/755319

<?php
ob_start();
/*
 *---------------------------------------------------------------
 * APPLICATION ENVIRONMENT
 *--------------------------------------------------------------- 

そのようなことをするのは救いですか?

編集:わかりました、私は間違っているかもしれません。何が間違っているかをプログラムで見つける方法はありますか? (間違った php タグ、空白などを見つけるプログラム)?

もう一度編集:エラーは CLI モードでのみ生成されます。エラーは次のとおりです。

<h4>A PHP Error was encountered</h4>

<p>Severity: Notice</p>
<p>Message:  Undefined index: REMOTE_ADDR</p>
<p>Filename: core/Input.php</p>
<p>Line Number: 351</p>

</div><div style="border:1px solid #990000;padding-left:20px;margin:0 0 10px 0;">

<h4>A PHP Error was encountered</h4>

<p>Severity: Warning</p>
<p>Message:  Cannot modify header information - headers already sent by (output started at /home/gofrendi/public_html/No-CMS/system/core/Exceptions.php:185)</p>
<p>Filename: libraries/Session.php</p>
<p>Line Number: 675</p>
4

2 に答える 2

8

最初の警告によって生成された出力は、2 番目の警告をトリガーします (つまり、ヘッダー情報を変更できません)。理論的には、最初の警告を解決すると、2 番目の警告は自動修正されるはずです。

開いsystem/core/Input.phpて、行番号 351 を次のように置き換えます。

$this->ip_address = $_SERVER['REMOTE_ADDR'];

と:

$this->ip_address = $this->server('remote_addr');
于 2013-03-07T13:16:08.930 に答える
0

出力バッファリングを避ける一般的な理由は、出力をバッファリングすることです。これはばかげているように見えますが、出力が最後までバッファに保存されている場合、プロセスが終了するまで一度に出力がブラウザに配信されません。つまり、ページが徐々にロードされていないように見えますが、最初にすべてを実行する必要があるため、遅く見えます。

したがって、通常、出力バッファリング以外にそれを行う方法がない場合は、おそらく同じことを行うための十分な議論があります.

于 2013-03-07T08:32:11.150 に答える