55

在 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 函数。包含的文件不应该回显任何内容。以防万一有人(例如=黑客)尝试,我需要一种删除方法。

4

5 回答 5

110
<?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
?>
于 2009-06-29T12:18:34.063 回答
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

于 2009-06-29T12:21:43.667 回答
1

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

话虽如此,您可以参考PHP中的输出缓冲选项。

于 2009-06-29T12:21:28.800 回答
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 ();

上面还将包含一个文件并将其内容作为字符串提供给您。

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

于 2009-06-29T12:33:04.267 回答
-1

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

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

在这两种情况下,做你所要求的会增加 0 安全性。

于 2009-06-29T12:55:44.347 回答