PHPでは、以前にエコーまたは印刷されたすべてのアイテムをクリア/削除する方法はありますか?
例えば:
<?php
echo 'a';
print 'b';
// some statement that removes all printed/echoed items
echo 'c';
// the final output should be equal to 'c', not 'abc'
?>
私のスクリプトはinclude関数を使用しています。含まれるファイルは、何もエコーしません。誰か(例=ハッカー)が試みた場合に備えて、削除する方法が必要です。
<?php
ob_start();
echo 'a';
print 'b';
// some statement that removes all printed/echoed items
ob_end_clean();
echo 'c';
// the final output is equal to 'c', not 'abc'
?>
出力バッファリング関数は、文字列を返すためだけに印刷する関数を強制するためのハッカーにも役立ちます。
<?php
ob_start();
var_dump($myVar);
$data = ob_get_clean();
// do whatever with $data
?>
@monoxideは正しいのですが、同じことをより直感的に行う方法を見つける方が良いでしょう。例えば。:
<?php
$val_to_print = $a;
if( $need_to_change==true )
$val_to_print = $b;
// when you are sure you won't have to change again...
echo $val_to_print;
?>
乾杯、
jrh
理想的には、最終的に印刷したくないものは出力しないでください。フラストレーションを減らすために、ロジックをプレゼンテーションから分離してください。
そうは言っても、PHP内の Output Buffering オプションを調べることができます。
デバッグ出力とプログラムステータス情報である場合、気になるのは、trigger_errorが次のように必要なものに近くなる可能性があることです。
trigger_error ("Attempting to load report #{$report_id}.", E_USER_NOTICE);
スクリプトが実稼働中の場合、通常は無効またはログに記録されているため、エラーは表示されません。また、die()を使用するのではなく、E_USER_ERRORを使用してこの方法で致命的なエラーを行うことをお勧めします。
ob_start ();
require ($filename);
$html = ob_get_clean ();
上記にはファイルも含まれ、その内容を文字列として提供します。
警告:バッファを捨てると、エラーメッセージが捨てられ、デバッグが(潜在的に)悪夢になります。