2

皆さんの休日が順調に進んでいることを願っています。

ここに別のPHP関連の質問があります。スクリプトで出力バッファーを使用しています。最近学んだことは無効な理由です(スクリプトの後半でヘッダーを渡すことができます)。スクリプトの最後で出力バッファーを使用する代わりに出力する準備ができるまで、すべての出力を変数または他の種類のストレージに格納する必要があることに気付きました。残念ながら、私はすでにこれらの関数とhtmlの自発的な出力を私のページにコーディングしています。このバージョンに対応するための厳しい期限があるため、スクリプトのバージョン2でこの問題を修正できることを望んでいました。

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

この動作を変更する方法はありますか、それとも製図板に戻って古いページの置き換えを開始する必要がありますか?また、なぜ最後まで出力を維持する必要があるのか​​、誰かに説明してもらえますか?私はいつも学びに興味があります。

みなさん、よろしくお願いします!2010年の最後の数日間をお楽しみください!

4

2 に答える 2

1

頭がおかしくて抽象的な質問は私よりも賢い人に任せますexit()が、エラーが発生したときにコードを単純化するラッパー関数を作成することをお勧めします。すなわち-

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

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

そして、すべての出口をその関数呼び出しに置き換えます。そうすれば、バッファーがフラッシュされ、プログラムは適切な時間に終了します。

于 2010-12-30T04:31:16.427 に答える
1

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

質問の他の部分に関しては、ob_flushパトリックが指摘したように、それは良い解決策です。

于 2014-05-28T15:22:29.973 に答える