在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函数。包含的文件不应该回应任何东西。为了防止有人(ex = hacker)尝试,我需要一种方法来删除。
答案 0 :(得分:92)
<?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'
?>
输出缓冲函数在hackery中也很有用,可以强制只打印返回字符串的函数,即
<?php
ob_start();
var_dump($myVar);
$data = ob_get_clean();
// do whatever with $data
?>
答案 1 :(得分:4)
虽然@monoxide是正确的,但更好地找到更直观的方法来做同样的事情。 e.g:
<?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
答案 2 :(得分:1)
理想情况下,您不应输出任何您最不想要打印的内容。保持逻辑与演示文稿分离,减少挫败感。
话虽如此,您可以参考PHP中的Output Buffering选项。
答案 3 :(得分:0)
如果是调试输出和程序状态信息,您担心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 ();
以上内容还将包含一个文件,并将其内容作为字符串提供。
警告:抛弃缓冲区也会抛弃任何抛出的错误消息,使调试(可能)成为一场噩梦。
答案 4 :(得分:-1)
如果黑客让我们说可以访问你的PHP文件,他也可以删除清除输出缓冲区的语句。
如果您这样做是因为您让用户上传PHP脚本,请告诉您这是一个非常糟糕的主意。
在这两种情况下,按照你要求的方式增加0安全性。