如何清除以前在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' ?>
我的脚本使用包含function。 包含的文件不应该回显任何东西。 以防万一有人(前=黑客)尝试,我需要一种方法来删除。
<?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' ?>
输出缓冲function
输出缓冲函数在hackery中也是有用的,以强制只打印返回string的函数,
<?php ob_start(); var_dump($myVar); $data = ob_get_clean(); // do whatever with $data ?>
而@monoxide是正确的,它更好地find更直观的方法来做同样的事情。 例如:
<?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
理想情况下,你不应该输出你最终不想打印的东西。 保持你的逻辑与演示文稿分开,以减less挫折。
这就是说,你可以参考PHP中的输出缓冲选项。
如果它是debugging输出和程序状态信息,你担心可能trigger_error可能更接近你所需要的,如:
trigger_error ("Attempting to load report #{$report_id}.", E_USER_NOTICE);
当你的脚本在生产中时,它通常不会显示任何错误,因为它们通常被禁用或logging。 使用E_USER_ERROR而不是使用die(),这样做也是最好的。
ob_start (); require ($filename); $html = ob_get_clean ();
上面还会包含一个文件,并以string的forms给你它的内容。
注意:切入缓冲区也会抛出任何错误消息,使debugging(可能)成为一场噩梦。
如果黑客让我们说可以访问您的PHP文件,他也将能够删除清除输出缓冲区的语句。
如果你这样做是因为你让用户上传PHP脚本,让我告诉你,这是一个非常糟糕的主意。
在这两种情况下,做你所要求的都会增加0安全性。