web-dev-qa-db-ja.com

PHPで以前にエコーされたアイテムをクリアする方法

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関数を使用しています。含まれるファイルは、何もエコーしません。誰か(例=ハッカー)が試みた場合に備えて、削除する方法が必要です。

42
edt
<?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
?>
96

@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

4
jrharshath

理想的には、最終的に印刷したくないものは出力しないでください。フラストレーションを減らすために、ロジックをプレゼンテーションから分離してください。

そうは言っても、PHP内の Output Buffering オプションを調べることができます。

1
Sampson

デバッグ出力とプログラムステータス情報である場合、気になるのは、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 ();

上記にはファイルも含まれ、その内容を文字列として提供します。

警告:バッファを捨てると、エラーメッセージが捨てられ、デバッグが(潜在的に)悪夢になります。

0
Meep3D