如何清除以前在PHP中回显的项目

问题描述 投票:43回答:5

在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 output echo output-buffering
5个回答
96
投票
<?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'

?>

Output buffering functions

输出缓冲功能在黑客中也非常有用,可以强制只打印返回字符串的功能,即。

<?php
ob_start();
var_dump($myVar);
$data = ob_get_clean();
// do whatever with $data
?>

4
投票

虽然@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


1
投票

理想情况下,您不应输出您最终不想打印的任何内容。将您的逻辑与演示文稿分开,以减少挫败感。

话虽如此,您可以在PHP中查阅Output Buffering选项。


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 ();

上面还包括一​​个文件,并以字符串形式提供其内容。

注意:抛弃缓冲区也将抛弃抛出的任何错误消息,(可能)使调试成为一场噩梦。


-1
投票

如果黑客说可以访问您的PHP文件,那么他也可以删除清除输出缓冲区的语句。

如果您这样做是因为让用户上传PHP脚本,请告诉我这是一个非常糟糕的主意。

在两种情况下,按照您的要求进行操作都会增加0安全性。

© www.soinside.com 2019 - 2024. All rights reserved.