在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);
当您的脚本在生产中时,它不会显示任何错误,通常会被禁用或记录。也最好用E_USER_ERROR而不是die()来执行致命错误。
ob_start ();
require ($filename);
$html = ob_get_clean ();
上面还包括一个文件,并以字符串形式提供其内容。
注意:抛弃缓冲区也将抛弃抛出的任何错误消息,(可能)使调试成为一场噩梦。
如果黑客说可以访问您的PHP文件,那么他也可以删除清除输出缓冲区的语句。
如果您这样做是因为让用户上传PHP脚本,请告诉我这是一个非常糟糕的主意。
在两种情况下,按照您的要求进行操作都会增加0安全性。