PHP 捕获 eval 输出

Posted

技术标签:

【中文标题】PHP 捕获 eval 输出【英文标题】:PHP catch eval output 【发布时间】:2021-12-30 09:09:42 【问题描述】:

我想catch eval 执行 的输出并且只看到 $B 的输出 ,有什么解决办法吗?

如果我执行这样的代码,我会得到两次输出:

首先来自评估

$B 秒

请不要问我为什么要使用 eval,而那个 eval 是邪恶的。

对于这个例子,我需要一个解决方案。

<?php
  $A = '<?php echo "Output"; ?>';
  eval(" ?> $A <?php ");
  $B = ob_get_contents();
  echo $B;
?>

【问题讨论】:

【参考方案1】:

您没有显示它,因此您需要使用ob_start 开始缓冲。然后获取并清理缓冲区,以便在执行结束时缓冲区为空ob_get_clean:

<?php
  ob_start();
  $A = '<?php echo "Output"; ?>';
  eval(" ?> $A <?php ");
  $B = ob_get_clean();
  echo $B;
?>

您也可以在ob_get_contents 之后的某个位置使用ob_cleanob_end_clean

【讨论】:

以上是关于PHP 捕获 eval 输出的主要内容,如果未能解决你的问题,请参考以下文章