2010-12-30 8 views
1

みんなの休日がうまくいって欲しいです。出力バッファとdie()/ exit()関数?

もう1つのPHP関連の質問です。スクリプトで出力バッファを使用しています。私が最近学んだのは無効な理由です(スクリプトの後半でヘッダーを渡すことができます)。私は今、出力バッファを使うのではなく、スクリプトの終わりに出力する準備が整うまで、すべての出力を変数や他の種類の記憶域に格納する必要があることを認識しています。残念ながら、私はすでにこれらの関数とhtmlの自発的な出力を既に自分のページにコーディングしています。このバージョンでは、このバージョンを満たす厳しい期限があるので、このバージョンのスクリプトでこの問題を修正できることを期待していました。

手元の質問に。私はこれを行う予定でしたが、明らかにdie()とexit()関数は出力バッファでうまく動作しませんでしたか?私はすべてのエラーメッセージの後にexit()を持っており、その時点で実行を終了する代わりに、出力バッファーのためにスクリプトが継続しているようです。出力バッファを削除してこの仮説をテストし、exit()関数が期待通りに機能することを確認しました。

この動作を変更する方法はありますか、または図面ボードに戻って古いページを置き換える必要がありますか?また、誰かがなぜ私たちは終了まで出力を保持する必要がありますか教えてください?私はいつも学習に興味があります。

ありがとうございます! 2010年の最後の数日間をお楽しみください!

+0

@ user509006 - あなたの既存のコードなしで推測することはできません... – ajreal

答えて

1

私はもっと知的な考え方に私よりも頭を浮かべますが、エラーが発生したときにコードを簡略化するためのラッパーexit()を作成することをお勧めします。 i.e-

if(!$good) 
{ 
    trigger_error('bleh', E_USER_WARNING); 
    errorExit(); 
} 

function errorExit() 
{ 
    ob_flush(); 
    exit(); 
} 

そして、その関数呼び出しとそのようにバッファがフラッシュされ、プログラムが適切な時間に終了すると、すべてのあなたの出口を交換してください。

+0

私はすでに関数を持っていますが、ob_flush()の前にはすぐに終了する必要があります!どうもありがとう! – user509006

1

ヘッダーと実際のページコンテンツの違いは、基本的には発生する位置のみです。 名前が示すとおり、ヘッダーは出力の冒頭にあります。その後、2つのキャリッジ/リターン(シンボルを入力)が送信され、それ以降はすべてコンテンツと見なされます。 したがって、何かをエコーし​​てからヘッダーを変更したい場合、それはできません。内容部分は既にヘッダー部分を閉じています。新しいヘッダーとして送信するものは、プレーンテキストとして表示されるようになりました(PHPインタプリタがあなたを止めさせるわけではありません)。

質問の他の部分については、ob_flushがPatrickが指摘したように良い解決策です。

関連する問題