在 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是正确的,它能够更好地找到做同样的更直观的方式。 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

在理想情况下,你不应该输出什么,你不最终要打印出来。保持你的逻辑从演示文稿分开较少沮丧。

这就是说,可以咨询输出缓冲选项内PHP。

如果您担心的是调试输出和程序状态信息,也许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的安全性。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top